之前写过一篇简单的git revert
学习,在之后的业务中通过导师的分享又发现了一些有趣的事情,所以再写一篇
场景
我们用git revrt
一般都是提交了之后发现哪里有问题再回退回来,一般都是处于一个分支下的,如果某次我做完了我自己的工作,去跟master合并,合并完毕之后已经git push
了,这时发现,呀,有一些不必要的测试代码还在里面想要回退自己的这次合并又不想影响master和其他人做的合并之类的操作要怎么办?
答案: 可以利用git revert -m <number> <commitid>
来解决
过程
首先我们创建一个test
分支并写入一行文字并commit
后push
,在这之后在master分支上也在同一个文件写入一行文字并commit
后push
,这时两者文件状态如下:
# 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内容
# 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内容
这时我们在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的提交历史:
可以看出第一条就相当于我们进行merge操作的提交,现在如果我们发现
test
分支的代码有问题不想合并了,就可以利用
git revert -m <number> <id>
来撤销我们的合并,number指的是合并时各个分支的顺序,可以查看log来确定:
merge历史
这里如果想撤销0ad开头的就是1,170则是2,那么都代表什么呢,看一下刚刚的git历史,我们会发现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(-)
撤销合并
会提示已经回退修改的文件了,并且157的版本回退到了0ad的版本,查看一下历史:
log
可以看到版本更新了,回退成功!
后记
这次学习耗时挺久时间,因为对于版本的更新不是很清楚原理,命令也不是特别熟,同时也学到了其他一些东西,比如微软出的vscode,上手之后简直不要太舒服,atom和sublime之前都说着做最优秀的代码编辑器,耗费了那么久还各种bug,微软出了个小团队简简单单就打造了一个集成各种插件,可视化工具的编辑器,这次主要利用的是Git
这个插件,还有各种其他的atom有的微软基本都有,git方面还可以可视化解决冲突,查看历史,提交修改等等,感觉还是团队的实力有一定的差距
对于我自己,这次也学到了其他相关的命令,如:
// 查看本地的所有操作记录
git reflog
// 不需要使用add添加修改的文件到暂存区,-a选项可以自动将所有修改更新到暂存区
git commit -m "..." -a
// 撤销master4到master2版本之间的所有修改
git revert -n master4..master2
网友评论