復原到某次曆史送出:
git log:檢視分支送出曆史,确認需要回退的版本
git reset --hard commit_id:進行版本回退
git push --force origin:推送至遠端分支
合并送出記錄:
git log:檢視分支送出曆史,确認需要開始合并的最初版本,應選取最初版本的前一個版本
git rebase -i commit_id:進入版本合并vim編輯模式,大概如下:
pick acf6d24 優化
pick 0353373 增加邏輯
pick 1234567 增加其他功能
# Rebase 2169bc5..0353373 onto 2169bc5 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
将第二行的pick改為s或者squash,意思是把“優化”和“增加邏輯”兩次送出記錄合并成一次,而“增加其他功能”保留原有送出記錄,
然後輸入:wq儲存,然後會到修改送出注釋的界面,不改的話直接:q退出,否則修改後:wq儲存退出
git log:确認送出記錄是否正确修改
git push --force origin:推送至遠端分支
修改送出記錄注釋:
git log:檢視分支送出曆史,确認需要開始合并的最初版本,應選取最初版本的前一個版本
git rebase -i commit_id:進入版本合并vim編輯模式,大概如下:
pick acf6d24 優化
pick 0353373 增加邏輯
pick 1234567 增加其他功能
将要修改的那行的pick改成reword,輸入:wq儲存退出,然後會到修改送出注釋的界面,修改注釋後:wq儲存退出
git log:确認送出記錄是否正确修改
git push --force origin:推送至遠端分支
剔除某次送出:
比如在master分支,有以下送出曆史:
42eae13 (HEAD -> master) 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改
如果發現第三次修改有錯誤,想要剔除第三次修改,卻要保留第四次修改呢?
這個時候就可以用revert指令:
git revert -n 97ea0f9
git commit -m "恢複第三次修改"
Git送出曆史會變成:
33b8b30 (HEAD -> master) Revert "恢複第三次修改"
42eae13 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改
實際上,Git把第三次修改從送出中剔除(還原)了,還保留了第四次修改,并且産生了新的commit_id
如果要檢視完整的送出記錄,可以用指令:
git reflog