Git - 基本概念(更改提交)

更改提交:

【注】如果一個分支已經公開了,並且可能已經存在於其他版本庫中了,你就不應該重寫,修改或更改該分支的任何部分。

通過git reset命令來更改提交:

git reset --soft HEAD // --soft:索引和工作目錄的內容不變,只是將HEAD遊標指向給定的提交,通過--soft選項,可以調整提交信息,即commit -m "[new]"

git reset --mixed HEAD^ // 和git reset HEAD^, 默認爲--mixed,索引改變,工作目錄不變,通過--mixed選項,可以修改要提交的文件內容。

git reset --hard HEAD^ //索引和工作路徑都改變。

通過git cherry-pick命令:

通常用於把版本庫中一個分支的特定提交引入一個不同的分支中。還可以重建一些提交。

A---B---C---D---E---F---G---H         (dev)
        \
         V---W---X---Y---Z           (rel_2.3)

例子:開發線dev在提交F中修復了一個bug,假設發佈版rel_2.3也存在這個bug,可以通過cherry-pick來將dev 中的提交引入rel_2.3中修復bug。

git checkout rel_2.3

git cherry-pick dev~2

A---B---C---D---E---F---G---H         (dev)
        \
         V---W---X---Y---Z---F'       (rel_2.3)
通過git revert 命令:

通常用於撤銷歷史記錄中的指定提交。

git revert master~3

通過 git commit --amend 命令:

通常這條命令用於修改最新提交,amend意味着提交內容基本相同,但某些方面需要調整或清理。最主要的通途就是在剛做一個提交後修改錄入錯誤。

git add [file] //修改了最新提交的某個文件,然後暫存。

git commit --amend //提交修改,生成一個新的提交替代之前的提交。

通過 git rebase 命令:

通常這條命令用於變基提交,也就是用來改變一串提交以什麼爲基礎的。

git checkout [要變基的分支]

git rebase [基礎分支---要變基到的提交]

git rebase [基礎分支---要變基到的提交] [要變基的分支]

例如,變基之前:

A---B---C---D---E       (master 基礎分支)
     \ 
      W---X---Y---Z      (topic 要變基的分支)
變基之後:git rebase master topic

A---B---C---D---E                       (master 基礎分支)
                 \
                  W'---X'---Y'---Z'        (topic 要變基的分支)

git rebase --onto master maint^ feature (master:要變基到的提交,maint^:當前分支的基礎提交,feature:要變基的分支)

git rebase --continue //解決衝突後,執行命令繼續變基

git rebase --skip //遇到衝突,執行命令,跳過沖突

git rebase --abort //遇到衝突,執行命令,放棄衝突

變基與合併

A---B---C---D        (master)
       \
        X---Y---Z       (dev)
          \
           P---Q      (dev2)
如果現在要將dev分支變基到master最近的提交,那麼需要:
git rebase master dev
git rebase dev^ dev2



發佈了66 篇原創文章 · 獲贊 9 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章