git 使用 tortoisegit 解冲突

git 解冲突须要注意的问题

弄清除冲突双向的修改意图,并在解决冲突时,同时处理两边的意图。html

举例说明

A.txt 文件,git

在 master 分支上,有一行文字(代码)是这样:工具

这是一段在 master 分支上的文字。

Alice 在 dev 分支上,修改了这段文字(代码),修改后以下:ui

在 dev 上,将 master 的文字修改成这段文字;
并添加了其它文字;
若是是代码,这些代码相互关联。

Bob 基于 master 分支开发功能,在 f/feature 分支上,也修改了这段代码,以下:3d

在一个功能分支(f/feature)上修改 master 上的代码;
以及与之相关的其它内容。

如今,Bob 须要把 dev 分支的代码合并到 f/feature 分支上,git 命令:(@f/feature) git merge dev
将获得一个冲突。
如何解决这个冲突?code

解冲突

解冲突推荐使用 GUI 工具,由于直观。这里介绍 tortoisegit 解冲突的操做。htm

(图1)操做入口:blog

(图2)冲突列表:开发

(图3)文件的解冲突页面get

对于比较简单的冲突,直接应用某一边的修改,或者作一下简单的编辑(图3中,下面的区域是能够编辑的。)

对于复杂冲突,须要了解两边对同一段代码的修改意图,即对方(Remote)为何要这样改,要达到什么目的?本方(Local)为何要这么改,要达到什么目的?

修改比较复杂是,在图3的界面中,可能看不清具体的修改内容,能够在 tortoisegit 中查看两边修改先后的对比。

(图4)查看两边具体的修改。

下面是一张稍显复杂的两边修改的对比图。

(图5)两边修改对比

经过图5 ,能够具体查看两边的修改意图,具体在解冲突是,可能没办法一次处理完。
这时须要先在临时处理冲突(如应用某一边的修改),并记录下另外一边的修改(如保留这个窗口,或者截图。)
在 git 的冲突处理完以后(这里其实只是形式上处理完了,实际上丢弃了某一边的修改),再修改代码。

更复杂的状况,可能两边对代码的改动都很是大,须要代码重构才能解决问题。固然,这个状况不多,也应该避免发生。

补充

如图1和图5所示,其中的 Remote 指被合并过来的分支,这里是在 f/feature 上合并 dev , 则 Remote 指 dev 上的修改,Local 指 f/feature 上的修改。

重点

兼顾两边的修改意图,不能由于解冲突,丢失了某一边的修改。

git GUI 与 tortoisegit

原文连接:
http://www.noobyard.com/article/p-aacezgyw-ka.html