Git學習筆記3 git revert

2021-06-06 20:58:04 字數 2126 閱讀 7557

我們難免會因為種種原因執行一些錯誤的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。

Git學習筆記(3)

在本次學習中,我的身份不再是專案管理者 專案建立者 qulewei了,我的身份是專案參與者yangjingya。通過yangjingya的賬號登入我們的內網gitlab,找到qulewei建立的公共專案,看到旁邊有fork按鈕,如圖所示 然後fork一下,如圖所示 比較一下不同點在於url變了,中間...

GIT學習筆記 3

接 2 git checkout head 或git checkout head 會用master分割槽的部分或全部檔案覆蓋暫存區和工作區的檔案。dangerous git ls tree l head 可瀏覽版本庫的檔案列表 git ls files 瀏覽暫存區檔案列表 git diff head...

git學習筆記3

github的使用 碼雲的使用 那麼乙個本地庫能不能既關聯github,又關聯碼雲呢?答案是可以的,因為git本身是乙個分布式版本控制系統,可以同步到另外乙個遠端庫,當然也可以同步到另外兩個遠端庫。使用多個遠端庫時,git給遠端庫起預設名稱室origin,如果有多個庫,我們需要用不同的名稱來標識不同...