1、git reset --soft HEAD^
撤銷最近的一次提交,將修改還原到暫存區。–soft 表示軟退回,對應的還有 --hard 硬退回;HEAD^ 表示撤銷一次提交,HEAD^^ 表示撤銷兩次提交,撤銷 n 次可以簡寫爲 HEAD~n
執行git branch -avv
命令會發現本地倉庫的 master 分支的版本號變成了前一次提交的版本號;
執行git status
查看倉庫狀態,發現上一個提交中的修改全部扔回了暫存區
相應文件修改後,再本地提交,然後執行git status
和git branch -avv
查看倉庫狀態和分支狀態:
可以看到本地倉庫的 master 分支與遠程倉庫的 origin/master 分支在提交版本上有了衝突,又叫做提交時間線分叉。因爲剛纔的提交操作不是基於遠程倉庫 origin/master 分支的最新提交版本,而是撤回了一個版本。
這種情況下也是可以將本地 master 分支推送到遠程倉庫的,需要加一個選項 -f(force強制推送)git push -f
執行git branch -avv
看一下分支信息,本地 master 與遠程 master 的版本號一致
2、git reflog
如果發現剛纔的版本回退操作全都是誤操作,此時可利用
git reflog
命令(它會記錄本地倉庫所有分支的每一次版本變化。實際上只要本地倉庫不被刪除,隨你怎麼折騰,都能回退到任何地方。reflog 記錄只存在於本地倉庫中,本地倉庫刪除後,記錄消失。)
此時發現有4個版本號,可以利用git reset --hard [版本號]
和git reset --hard HEAD@{x}
退回到你想要的版本(注意:這都是在本地倉庫進行的操作
)