我由於開發中不小心在master分支上開發,忘記了切換分支,最后我直接在master分支上提交,push,在開發分支上merge了master分支。
然后,同事告訴我他的代碼要准備上線了,然而我的代碼還沒測試通過肯定不能一起上線,於是,需要回退了。
平時項目中很少用到回退功能的,一直沒有怎么嘗試過git reset 和git revert的區別,記憶也不深刻。
這次主要使用git reset。
$ git reset --hard HEAD^ 回退到上個版本 $ git reset --hard commit_id 退到/進到 指定commit_id $ git push --force 強制推送到遠程,千萬不要拉取,否則又會把最新提交拉下來
git reset --hard在master回退到之前的某個版本之后,后面的提交記錄則都消失了,是完全回退到當時提交的模樣。而開發分支上之前合並的master分支的內容是不會跟着回退的,還是最新修改好的代碼,可以繼續在這基礎上開發、測試。
git reset其他用法體驗:
【git reset是不會生成新的提交的,git revert會生成新的提交。】
1、
git reset --mixed
當前head指針指向回退到的提交記錄上,后幾次提交改變的文件放在了本地暫存區,
git push
此時提交會提示本地代碼比遠程的落后,push失敗,改為git push --force 強制push, 會提示不允許強制push
git push --force
解決辦法如下:
然后強制push成功:
此時代碼已變為第二次提交時的兩個文件了:
提交記錄也恢復到了前兩次提交。
git log可以查看當前存在的兩次提交記錄,git reflog可以查看所有提交記錄:
2、
git reset --soft 第四次提交的commit
文件全部恢復,本地暫存區有記錄。
3、
git reset --hard 第二次提交的commitid
git revert
git revert 第三次提交的commitid
git push
revert的結果是:只是把那一次的修改的東西刪除了,這里只是把第三次提交增加的3.txt刪除了,並且會增加一條提交記錄。