git revert后記

之前寫過一篇簡單的git revert學習,在之后的業(yè)務(wù)中通過導師的分享又發(fā)現(xiàn)了一些有趣的事情,所以再寫一篇

場景

我們用git revrt一般都是提交了之后發(fā)現(xiàn)哪里有問題再回退回來,一般都是處于一個分支下的,如果某次我做完了我自己的工作,去跟master合并,合并完畢之后已經(jīng)git push了,這時發(fā)現(xiàn),呀,有一些不必要的測試代碼還在里面想要回退自己的這次合并又不想影響master和其他人做的合并之類的操作要怎么辦?

答案: 可以利用git revert -m <number> <commitid>來解決

過程

首先我們創(chuàng)建一個test分支并寫入一行文字并commitpush,在這之后在master分支上也在同一個文件寫入一行文字并commitpush,這時兩者文件狀態(tài)如下:

# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:master x [15:07:55]
$ git commit -m "master修改代碼" -a
[master 170b561] master修改代碼
 1 file changed, 1 insertion(+), 1 deletion(-)

# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:master o [15:08:12]
$ git push origin master
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 374 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:xdlkc/NovelSearchTool.git
   3baaee3..170b561  master -> master
master內(nèi)容
# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:test o [15:08:56]
$ git commit -m "test修改代碼" -a
[test 0ad5647] test修改代碼
 1 file changed, 1 insertion(+), 1 deletion(-)

# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:test o [15:09:18]
$ git push origin test
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 823 bytes | 0 bytes/s, done.
Total 6 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:xdlkc/NovelSearchTool.git
   5edbba6..0ad5647  test -> test
test內(nèi)容

這時我們在test分支上進行合并:

# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:test o [15:12:18]
$ git merge master
Auto-merging biz/zip.py
CONFLICT (content): Merge conflict in biz/zip.py
Automatic merge failed; fix conflicts and then commit the result.

不出所料,會報沖突,那我們把這個沖突解決掉,然后再提交:

# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:test x [15:12:19] C:1
$ git add biz/zip.py

# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:test x [15:14:18]
$ git commit -m "解決合并沖突"

這時我們利用VS code的插件來查看一下git的提交歷史:

git歷史

可以看出第一條就相當于我們進行merge操作的提交,現(xiàn)在如果我們發(fā)現(xiàn)test分支的代碼有問題不想合并了,就可以利用

git revert -m <number> <id>

來撤銷我們的合并,number指的是合并時各個分支的順序,可以查看log來確定:


merge歷史

這里如果想撤銷0ad開頭的就是1,170則是2,那么都代表什么呢,看一下剛剛的git歷史,我們會發(fā)現(xiàn)0ad就是test之前處于的版本,而170則是master處于的分支;接下來的id就是指的本次commit id也就是157,下面我們測試一下如果想把當前版本撤成test分支:

# lkc @ lkc in ~/Desktop/Code/NovelSearchTool on git:test o [15:32:30]
$ git revert -m 1 157d82
[test 8bb8c01] Revert "解決合并沖突"
 1 file changed, 1 deletion(-)
撤銷合并

會提示已經(jīng)回退修改的文件了,并且157的版本回退到了0ad的版本,查看一下歷史:


log

可以看到版本更新了,回退成功!

后記

這次學習耗時挺久時間,因為對于版本的更新不是很清楚原理,命令也不是特別熟,同時也學到了其他一些東西,比如微軟出的vscode,上手之后簡直不要太舒服,atom和sublime之前都說著做最優(yōu)秀的代碼編輯器,耗費了那么久還各種bug,微軟出了個小團隊簡簡單單就打造了一個集成各種插件,可視化工具的編輯器,這次主要利用的是Git這個插件,還有各種其他的atom有的微軟基本都有,git方面還可以可視化解決沖突,查看歷史,提交修改等等,感覺還是團隊的實力有一定的差距

對于我自己,這次也學到了其他相關(guān)的命令,如:

// 查看本地的所有操作記錄
git reflog
// 不需要使用add添加修改的文件到暫存區(qū),-a選項可以自動將所有修改更新到暫存區(qū)
git commit -m "..." -a
// 撤銷master4到master2版本之間的所有修改
git revert -n master4..master2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容