Git學習筆記 git revert

2021-09-08 18:10:13 字數 2232 閱讀 8553

我們難免會因為種種原因執行一些錯誤的commit / push,git提供了revert命令幫助程式設計師修復這樣的錯誤。

舉個例子,下圖是git commit 的歷史記錄

git revert 命令會通過乙個新的commit 來使倉庫倒退乙個commit,在上例中,如果程式設計師想要revert 最新的那次commit (updated to rails 2.3.2 and edge hoptoad_notifier)

$ git revert head

finished one revert.

[master]: created 1e689e2:

"revert "updated to rails 2.3.2 and edge hoptoad_notifier""

git 會自動生成乙個 revert 「updated to rails 2.3.2 and edge hoptoad_notifier」 為注釋的新 commit,這時的歷史記錄如下

當然,如果revert不順利的話,程式設計師需要手動解決conflict的問題。

通常情況下,上面這條revert命令會讓程式設計師修改注釋,這時候程式設計師應該標註revert的原因,假設程式設計師就想使用預設的注釋,可以在命令中加上--no-edit引數。另乙個重要的引數是-n或者--no-commit,應用這個引數會讓revert 改動只限於程式設計師的本地倉庫,而不自動進行commit,如果程式設計師想在revert之前進行更多的改動,或者想要revert多個commit,這個引數尤其好用。

相比於revert commit,revert merge更麻煩一些,在上例中,revert commit之後,歷史記錄裡面最近的一次即為merge,如果簡單使用下面這條revert命令,就會出現錯誤

$ git revert head~1

fatal: commit 137ea95 is a merge but no -m option was given.

對於revert merge的情況,程式設計師需要指出revert 這個merge commit中的哪乙個。通過-m或者--mainline引數,以及配合乙個整數引數,git就知道到底要revert哪乙個merge。我們先來看一下要revert的這個merge commit:

$ git log head~1 -1

commit 137ea95c911633d3e908f6906e3adf6372cfb0ad

merge: 5f576a9... 62db4af...

author: nick quaranto date: mon mar 16 16:22:37 2009 -0400

merging in rails-2.3 branch

如果使用git revert head~1 -m 1命令,也就是5f576a9,使用-m 2會revert第二個commit,也就是62db4af。

$ git revert head~1 --no-edit --mainline 2

finished one revert.

[master]: created 526b346: "revert "merging in rails-2.3 branch""

$ git log -1

commit d64d3983845dfa18a5d935c7ac5a4855c125e474

author: nick quaranto date: mon mar 16 19:24:45 2009 -0400

revert "merging in rails-2.3 branch"

this reverts commit 137ea95c911633d3e908f6906e3adf6372cfb0ad, reversing

changes made to 62db4af8c77852d2cc9c19efc6dfb97e0d0067f5.

自動生成的comment也會標示revert的是merge裡的哪乙個commit。

直接revert一次merge提交:

git revert f67024f9df95bb8fb01228ce596e7c33ccef1753 -m 1

Git學習筆記

git stash git stash list 顯示git棧內的所有備份,可以利用這個列表來決定從那個地方恢復。git stash clear 清空git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。關於git stash的詳細解釋,適用場合,這裡做乙個說明 使用git...

git 學習筆記

1 git checkout master 切換分支 2 git checkout b xx 新建分支,同時切換到該分支 3 dev 4 git add a 將變動檔案,提交到index 5 git commit m 將 暫存區 檔案,加入到版本控制中。6 git checkout master 7...

Git 學習筆記

顯示版本庫.git所在的目錄 git rev parse git dir 顯示工作區的根目錄 git rev parse show toplevel 相對於工作區根目錄的相對目錄 git rev parse show prefix git config 命令各引數的區別 git config e 版...