likes
comments
collection
share

探索git合并工具mergetool的正确打开方式

作者站长头像
站长
· 阅读数 69

上期有篇文章提到了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
评论
请登录