阡陌 发表于 2024-2-6 00:11:44

TortoiseGit 合并过程



将本地的修改 Commit 后,push 到服务器时提示失败。这是可能是因为本地的版本落后于远程版本,服务器上的版本已经被别人抢先一步更新了。这个时候就要做一下合并操作了。所谓的合并可以是合并同一分支(比如上述往 master 分支)的不同版本,也可以是合并不同分支(比如要将 dev 分支合并到 master 分支),查看同一个文件不同版本间的差异并选择两者中的一种或发现新的问题作出新的改动,最后再 commit、push 的过程。

先 Pull,由于我们已经知道本地与服务器两个版本是不同的,所以已经预料到会有问题。

![](https://file.mculoop.com/images/2024/01/11/202401111743499.png)

Pull 的时候会自动合并,由于 git 访问不了公司加了密的文件,所以文本文件被当成了二进制文件,自动合并不起作用,只能手动合并。不过即使能正常自动合并,也可能合并出错,毕竟机器还不能完全理解人的意图。

本地文件的图标也会发生变化,感叹号的文件就是有冲突的文件:

![](https://file.mculoop.com/images/2024/01/11/202401111743807.png)

点击窗口或菜单中的 Resolve,开始解决冲突的过程。

![](https://file.mculoop.com/images/2024/01/11/202401111743278.png)

弹出来冲突文件列表:

![](https://file.mculoop.com/images/2024/01/11/202401111743489.png)

由于我使用了 Beyond Compare 做第三方比较/合并工具,所以双击文件就打开了 BC:

![](https://file.mculoop.com/images/2024/01/11/202401111744342.png)

同时自动生成了三个文件(应该是 git 生成的,而不是 bc,用内置合并工具时也会生成这几个文件):

![](https://file.mculoop.com/images/2024/01/11/202401111744380.png)

编辑器打开冲突文件 .gitignore,可以看到自动合并的痕迹:

![](https://file.mculoop.com/images/2024/01/11/202401111745248.png)

`<<<<<<< HEAD` 与` =======` 之间的内容是本地主分支上的内容,`>>>>>>> c7877cc893ca1171b829ac7f48187a97befacfdd` 是 远程主分支上最新版本 `c7877` 的内容。两个内容一样,都是相对于上一版本增加的内容。

BC 上面三列分别是 BASE、LOCAL、REMOTE,分别表示上一个版本(感觉可能是共同的祖先),本地版本,远程版本,这三个内容是只读的,改不了。下面的窗口是合并操作的输出,并不是工作区冲突的那个文件的实际内容。

把所有冲突解决掉,commit 然后 push 到服务器。



取消合并:

在 commit 前可以取消合并操作,以使工作区的文件退回到本地最新版本的状态。

![](https://file.mculoop.com/images/2024/01/11/202401111747851.png)

![](https://file.mculoop.com/images/2024/01/11/202401111747878.png)



页: [1]
查看完整版本: TortoiseGit 合并过程