目錄
本篇文章主要記錄 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~~~