Git 版本回退
git 版本回退
有這樣一種場景: 用git commit幾個版本,然后突然發現最近幾次ci都有問題,準備取消。
G1 - G2 - G3 - B1 - B2 - B3
G1,G2,G3都是good commit,但是從B1開始,后面的B2,B3都是bad commit。現在要"撤銷"幾次commit回滾到G3。
理解HEAD
HEAD是git的當前commit的指針,具體含義如下
G1 - G2 - G3 - B1 - B2 - B3 \ \ \ \-- HEAD \ \ \------ HEAD~1 \ \---------- HEAD~2 \-------------- HEAD~3
reset
- 如果本地未曾push到remote,那么可以直接采用reset,回滾到某個版本
$ git reset --hard HEAD~3
reset是本地的code、緩沖區都會回退到某個版本,會變成這樣,之前的commit記錄都沒了。
G1 - G2 - G3
\-- HEAD
這種情況下,版本是回退了,但是git push的時候會報錯,原因就是本地版本比遠程版本更低,除非使用push --force,但是這是很危險的操作,會導致G3以后所有用戶的commit都丟失!
revert
- 如果本地ci已經push到remote,就需要revert了
revert用法是
$ git revert --no-commit <start_ci>..<end_ci> 其中start_ci不包含,區間表示 (start_ci, end_ci],回滾到start_ci版本
上面的場景
$ git revert --no-commit HEAD~2^..HEAD
or
$ git revert --no-commit HEAD~3..HEAD
or
$ git revert --no-commit HEAD HEAD~1 HEAD~2
執行完 git revert后,變成了如下:R`就是最新的一次commit
G1 - G2 - G3 - B1 - B2 - B3 - R`
查看diff
$ git diff HEAD~4 HEAD
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!