git重置或還原已提交的代碼--git reset和git revert


背景

在多人協作時,對代碼的管理,難免會出現錯誤。如果出現錯誤,我們分析下來是要進行一些回退操作,那么解決辦法有如下兩種:
git reset
git revert

 

 

 

 

兩種方式

git reset

在使用git reset命令前,需要先了解一個概念:HEAD
HEAD 是當前分支引用的指針,它總是指向該分支上的最后一次提交。這表示 HEAD 將是下一次提交的父結點。
通常,理解 HEAD 的最簡方式,就是將它看做 你的上一次提交 的快照。
查看快照的操作如下:
下例就顯示了 HEAD 快照實際的目錄列表,以及其中每個文件的 SHA-1 校驗和

git cat-file -p HEAD git ls-tree -r HEAD

git reset的作用就是修改HEAD的位置,即將HEAD指向的位置改變為之前存在的某個版本。

適用場景:
如果我們想直接回到之前的某一版本,但是不想保留該目標版本后面的版本,就可以用這種方法。

分支操作者, 操作如下:

git checkout <branch_name>
# 切換到目標分支上

git reset --hard <commit_id>
# 本地目標分支上重置代碼到上面指定的commit_id, 
# 注意:該commit_id之后的所有提交都會丟失。
# 執行完后,HEAD的位置已經在該commit_id的位置
git reset --hard HEAD^  # 回到最新的一次提交
git push -f     等同於  git push --force
# 在上一條命令中,已經在本地分支中reset好,接下來讓遠程分支也有相同的效果,可以直接運行這條命令。
# 執行后,可以去代碼托管網站查看

git push -f origin <branch_name>
# 如果目標分支和遠程分支沒有關聯上,可以用這條命令,指出遠程分支

其他分支使用者:

git checkout <branch_name>
# 切換到目標分支上

git reset --hard origin/branch_name
# 這步就是其他同事把自己本地branch_name重置到與origin/branch_name一致,
# 注意
# --hard參數會丟棄超過origin的所有commit
# 如果不想丟棄可以用 --mixed 或 --soft,具體用哪個根據自己情況來

 

git revert

Git的 “還原” 操作。
Git 給你一個生成一個新提交的選項,提交將會撤消一個已存在提交的所有修改。

適用場景:
如果我們想撤銷之前的某一版本,但是又想保留該目標版本后面的版本,記錄下這整個版本變動流程,就可以用這種方法。

git revert -n <commit_id>
# 本地目標分支撤銷指定的commit_id
# 注意:做完上面的操作后,可能會出現沖突,需要先解決沖突,在git add,
# 然后使用 git commit 提交

git push
# 在上一條命令中,已經在本地分支中revert好,接下來讓遠程分支也有相同的效果,可以直接運行這條命令。
# 執行后,可以去代碼托管網站查看

 

注意,git revert后填的commit_id不能是 merge操作產生的commit_id.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM