Git筆記:撤銷本地提交 & 恢復遠程倉庫提交

目錄

1. 撤銷還沒有推送到remote倉庫的提交

1.1 完全撤銷-捨棄你的全部改動,銷燬提交

1.1.1 撤銷提交後又想恢復剛剛銷燬的提交

1.2 撤銷-但保留你的改動

1.3 最安全輕微的撤銷 

2. 撤銷已經推送到remote倉庫的提交

2.1 利用git revert來撤銷遠程提交


本篇文章主要記錄 git reset 及 git revert 的使用方法。

1. 撤銷還沒有推送到remote倉庫的提交

撤銷最新的本地提交,如下圖所示,C時master分支上最新的提交,現在我們要撤銷master分支上的提交C。

   (F)
A-B-C
    ↑
  master

C是HEAD(HEAD: 代表這當前分支上最新的commit提交。), F是文件的狀態.

1.1 完全撤銷-捨棄你的全部改動,銷燬提交

當你新加了一些改動,並且添加這些改動,然後commit提交到本地,這時你發現的你的改動完全做錯了,你想撤銷這個提交,而且不需要保留之前的改動。

git reset --hard HEAD~

執行完reset命令後,執行 git status 命令來查看你branch狀態,你可以發現你剛剛的提交消失了,並且之前的change改動也消失了,效果如下圖所示。

 (F)
A-B
  ↑
master

1.1.1 撤銷提交後又想恢復剛剛銷燬的提交

當你用git reset --hard HEAD~ 來撤銷提交後,你銷燬了你的提交,但假如這時你突然又想恢復剛剛銷燬的提交,來看看之前做的改動。這時候你能恢復剛銷燬的提交嗎?答案是可以的!

恢復提交步驟:

    1. 執行git reflog命令來查看你剛剛銷燬提交的記錄及其哈希值。

git reflog

    2. 找到相對應的哈希值,執行git checkout -b someNewBranchName shaYouDestroyed命令,如上圖我執行的命令:

git co -b fix/recover-commit-remove-before 7144f51

    看,這時你恢復了這個提交,如上圖所示,你可以在“fix/recover-commit-remove-before”分支上查看該提交。     

1.2 撤銷-但保留你的改動

當你做了一些改動,並且添加這些改動,然後commit提交到本地,這時你發現的你的改動有點小問題,你想撤銷這個commit提交,而且要保留之前的改動,方便在之前的改動基礎上做一些新的改動。
撤銷方法步驟爲:

git reset HEAD~

執行完reset命令後,再執行 git status 來查看你之前的那些改動,你會發現你之前的哪些改動都還在,效果如下圖所示:

   (F)
A-B-C
  ↑
master

1.3 最安全輕微的撤銷 

保留文件的改動及索引狀態,撤銷完成後將會到git添加改動的狀態,實現方法爲:

git reset --soft HEAD~

實現效果如下圖所示:撤銷完成,回到git添加改動後的狀態。

 

2. 撤銷已經推送到remote倉庫的提交

撤銷已經推送到遠程倉庫的提交,

     (F)
A-B-C-D
      ↑
   master

D是HEAD(是我們最新的提交,現在我們要撤銷D到C), F是文件的狀態.

2.1 利用git revert來撤銷遠程提交

git revert HEAD   (恢復HEAD提交)
或者
git revert <commit_hash> (恢復對應哈希值的提交)

我們恢復分支上的狀態到C,但是我有revert的提交記錄,如下圖所示:

       (F)
A-B-C-D-E
        ↑
      master

E是恢復D的提交改動,所以狀態其實是跟C一樣。

如果你不想有這個revert提交記錄,這時你就需要整理你的branch提交了,具體操作步驟請看另外的博客:Git 筆記:將兩個提交合併爲一個

注意:撤銷還原遠程提交時需注意有沒有人pull了你的提交,不然將引起額外的工作,親測,哈哈!

reset 與 revert 操作還是挺重要的,多試幾次,很快就能熟能生巧。

 

END~~~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章