文章目錄
- 工作區 暫存區 本地倉庫 遠程倉庫
- 需求:已推送到遠程倉庫,想要撤銷操作
- git revert (添加新的提交來“反做”之前的更改,云端會殘留上次的提交記錄)
- git reset(相當于覆蓋上次的提交)
- 1.--soft:
- 2.--mixed (默認選項):
- 3. --hard:
- 注意事項
- 說明:
- 參考:
工作區 暫存區 本地倉庫 遠程倉庫
需求:已推送到遠程倉庫,想要撤銷操作
git revert (添加新的提交來“反做”之前的更改,云端會殘留上次的提交記錄)
如果你已經將提交推送到了遠程倉庫,并且想要撤銷這次提交,你可以使用 git revert
命令。這個命令會創建一個新的提交,這個新提交會“反做”之前的提交,從而撤銷那些更改。這樣做的好處是不會改變項目的歷史記錄,因此是協作項目中推薦的做法。
以下是使用 git revert
命令的步驟:
-
找到要撤銷的提交的哈希值:
使用git log
查看提交歷史,并找到你想要撤銷的提交的哈希值。 -
執行 revert 操作:
使用git revert
命令加上提交的哈希值來撤銷這次提交:git revert [提交哈希值]
如果你只是要撤銷最近的一次提交,可以使用 HEAD 指針來引用它:
git revert HEAD
-
解決可能出現的沖突(如果有的話):
如果撤銷過程中出現沖突,Git 會停止并讓你手動解決這些沖突。解決完沖突后,你需要添加這些更改到暫存區并完成 revert 操作:git add [解決沖突的文件] git revert --continue
-
推送 revert 操作到遠程倉庫:
完成 revert 操作并測試沒有問題后,將這次 revert 提交推送到遠程倉庫:git push origin [分支名]
請注意,使用 git revert
并不會從項目歷史中刪除任何提交,它只是添加一個新的提交來“反做”之前的更改。如果你需要徹底從歷史記錄中刪除提交,那么需要考慮使用 git reset
并使用 --force
選項與遠程倉庫同步,但這種做法風險較高,因為它會改變項目的歷史記錄。
git reset(相當于覆蓋上次的提交)
使用 git reset
撤銷上一次的提交,你可以根據自己的需求選擇不同的操作方式。:
1.–soft:
撤銷最后一次提交,但是保留更改在暫存區。提交信息和更改都會撤銷,但是更改的內容還在暫存區,可以重新提交。
git reset --soft HEAD~1
2.–mixed (默認選項):
撤銷最后一次提交,但是保留更改在工作目錄。提交信息會被撤銷,更改的內容會保留在工作目錄中,需要重新暫存和提交。
git reset --mixed HEAD~1
這是默認的 git reset
行為。它會重置 HEAD 和暫存區到指定的提交,但不改變工作目錄。
相當于 git reset HEAD~1
3. --hard:
撤銷最后一次提交,并且丟棄所有更改。提交信息和更改都會被永久丟棄,工作目錄、暫存區和HEAD都會回退到上一個提交的狀態。
git reset --hard HEAD~1
- 如果你使用
--hard
,你將失去最后一次提交的所有更改,這是不可逆的。如果你使用 --soft 或 --mixed,你將保留更改,可以重新提交。
注意事項
-
如果你的更改已經推送到了遠程倉庫,并且其他人可能已經基于這些更改進行了操作,使用
--hard
重置可能會導致問題。 -
如果你使用
--soft
重置,并且想要撤銷更改,你可以使用git clean
來清除未提交的更改:git clean -fd
這個命令會刪除未跟蹤的文件和目錄,
-f
表示強制,-d
表示刪除目錄。
說明:
git reset 用于移動 HEAD 指針,git reset之后云端仍有上次提交的記錄,所以撤銷之后的重新提交需要在git push之后加上 -f
用于強制覆蓋上次不用的提交。直接git push會出現問題
git push --force
參考:
- git提交錯了?別慌,直接刪除提交記錄:https://blog.csdn.net/weixin_45334346/article/details/138388941