今天學習了git回退的兩個命令,現在總結一下:
1.git reset
如果想回退錯誤的提交C和D,只要把指針移到B上
git reset --hard a0fvf8
而這時候,遠程倉庫的指針還在D上,如果直接用 git push 將無法推到遠程倉庫,所以只能用 git push -f 強制推到遠程倉庫,
這樣會有弊端,當你發現C和D不是錯誤的或者有用的話,將無法找回,因為已經指針遠程倉庫的指針已經在B上了。
這時候 git revert 就有作用了
2.git revert
git revert的作用通過反做創建一個新的版本,這個版本的內容與我們要回退到的目標版本一樣,但是HEAD指針是指向這個新生成的版本,而不是目標版本。
單個回退,先revert C,在revert D
git revert 5lk4er
git revert 76sdeb
批量回退
git revert OLDER_COMMIT^..NEWER_COMMIT
這樣,錯誤的C和D依然保留,以后可以找得回,最后直接 git push 直接推到遠程倉庫。
在舉個例子:
錯誤的B在A和C中間,這時的操作是
先revert B,git revert a0fvf8
在revert C, git revert 76sdeb
再使用 cherry-pick
命令將 C 提交重新再生成一個新的提交 C'',這樣就實現了將 B提交回退的需求。
3.區別:
通過以上對比可以發現,git reset 與 git revert 最大的差別就在於,git reset 會失去后面的提交,而 git revert 是通過反做的方式重新創建一個新的提交,而保留原有的提交。