之前寫過一篇簡單的git revert
學(xué)習(xí),在之后的業(yè)務(wù)中通過導(dǎo)師的分享又發(fā)現(xiàn)了一些有趣的事情,所以再寫一篇
場(chǎng)景
我們用git revrt
一般都是提交了之后發(fā)現(xiàn)哪里有問題再回退回來,一般都是處于一個(gè)分支下的,如果某次我做完了我自己的工作,去跟master合并,合并完畢之后已經(jīng)git push
了,這時(shí)發(fā)現(xiàn),呀,有一些不必要的測(cè)試代碼還在里面想要回退自己的這次合并又不想影響master和其他人做的合并之類的操作要怎么辦?
答案: 可以利用git revert -m <number> <commitid>
來解決
過程
首先我們創(chuàng)建一個(gè)test
分支并寫入一行文字并commit
后push
,在這之后在master分支上也在同一個(gè)文件寫入一行文字并commit
后push
,這時(shí)兩者文件狀態(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
# 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
這時(shí)我們?cè)?code>test分支上進(jìn)行合并:
# 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.
不出所料,會(huì)報(bào)沖突,那我們把這個(gè)沖突解決掉,然后再提交:
# 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 "解決合并沖突"
這時(shí)我們利用VS code的插件來查看一下git的提交歷史:
可以看出第一條就相當(dāng)于我們進(jìn)行merge操作的提交,現(xiàn)在如果我們發(fā)現(xiàn)
test
分支的代碼有問題不想合并了,就可以利用
git revert -m <number> <id>
來撤銷我們的合并,number指的是合并時(shí)各個(gè)分支的順序,可以查看log來確定:
這里如果想撤銷0ad開頭的就是1,170則是2,那么都代表什么呢,看一下剛剛的git歷史,我們會(huì)發(fā)現(xiàn)0ad就是test之前處于的版本,而170則是master處于的分支;接下來的id就是指的本次commit id也就是157,下面我們測(cè)試一下如果想把當(dāng)前版本撤成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(-)
會(huì)提示已經(jīng)回退修改的文件了,并且157的版本回退到了0ad的版本,查看一下歷史:
可以看到版本更新了,回退成功!
后記
這次學(xué)習(xí)耗時(shí)挺久時(shí)間,因?yàn)閷?duì)于版本的更新不是很清楚原理,命令也不是特別熟,同時(shí)也學(xué)到了其他一些東西,比如微軟出的vscode,上手之后簡直不要太舒服,atom和sublime之前都說著做最優(yōu)秀的代碼編輯器,耗費(fèi)了那么久還各種bug,微軟出了個(gè)小團(tuán)隊(duì)簡簡單單就打造了一個(gè)集成各種插件,可視化工具的編輯器,這次主要利用的是Git
這個(gè)插件,還有各種其他的atom有的微軟基本都有,git方面還可以可視化解決沖突,查看歷史,提交修改等等,感覺還是團(tuán)隊(duì)的實(shí)力有一定的差距
對(duì)于我自己,這次也學(xué)到了其他相關(guān)的命令,如:
// 查看本地的所有操作記錄
git reflog
// 不需要使用add添加修改的文件到暫存區(qū),-a選項(xiàng)可以自動(dòng)將所有修改更新到暫存區(qū)
git commit -m "..." -a
// 撤銷master4到master2版本之間的所有修改
git revert -n master4..master2