探索git合并工具mergetool的正确打开方式
上期有篇文章提到了git的基本配置以及将代码添加到暂存区、提交、推送到远程仓库的操作。
然而,在实际项目应用中,笔者发现光会add和commit还远远不够,因为用git本来就是为了协作,而协作则避免不了和别人的代码发生冲突。 本文就来聊聊如何利用git来处理这个问题。
用Github的:先sync
每次写代码前本地先git pull。 如果有冲突就解决冲突,可以用 git mergetool 查看是哪里冲突了,之后add和commit来修改对应部分,然后再pull。
关于git mergetool
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
输入git mergetool
后终端会同时打开4个文件窗口,其布局和表示的内容如上图所示。
- 文件中标记红色的部分是LOCAL和REMOTE的不同之处。
- 最下面的MERGED是当前可编辑的vim窗口,将它改成什么样子,代码成功合并之后就是什么样子。
可以一点一点地对照着LOCAL和REMOTE改掉MERGED里相应的部分(前置知识:学点vim操作),也可以用vim的快捷键:
:diffget RE # get from REMOTE
:diffget BA # get from BASE
:diffget LO # get from LOCAL
来选取想要改成的文件的最终版本。
然后:wqa 保存修改MERGED文件并退出这4个窗口。
关于.orig
用了mergetool的代码会产生一个.orig文件,表示自己本地更改前的原文件,它相当于是起一个备份的作用,按理说成功合并后该文件就能删掉。笔者之前由于没有仔细检查代码目录结构,没有发现它的存在,直接给提交和推送上去了,制造了很多不必要的麻烦。
设置不产生该.orig文件:
git config --global mergetool.keepBackup false
可视化查看历史commit结点的情况
git就像一棵树,它本身的结构像一棵树(tree .git
可以看到git本身的树形结构),它将代码版本也组织管理得像一棵树。
只有理解并操作这棵树,才能更得心应手地写代码。
- 如果系统支持图形化的,可以用
gitk
; - 如果是服务器,没有GUI的,可以用
git log --oneline --abbrev-commit --graph
转载自:https://juejin.cn/post/7195005305699172408