git 解决冲突 —— git commit 之后使用 TortoiseGit 编辑冲突文件
开发项目时如果多人同时修改到同一个文件,将导致远程代码仓中的修改和本地的修改相冲突,此时拉取远程代码仓将无法自动合并,需要手动去解决。如果本地的修改还没有 commit
或 stash
,将会提示新进行 commit
或 stash
操作,来保存本地的修改,避免被远程仓库的修改所覆盖。
此时可以在 git commit
之前解决冲突, 或 git commit
之后解决冲突。
git commit
之后解决冲突,可以避免对冲突文件的手动备份操作,但是会多一个合并的 Merge
提交,在此整理 git commit
之后使用 TortoiseGit 解决冲突的具体方法如下。
1、操作分支的现状
远程仓库:\(A ---> B\)
本地仓库:\(A ---> C\)
远程仓库和本地仓库的对应分支上有共同的提交 A
,远程仓库上的提交 B
和本地仓库的提交 C
修改了同一文件,导致无法直接合并。
2、拉取并解决冲突
1)、对本地的代码仓进行 git pull
操作
git pull
将提示自动合并失败,如下图提示对应的文件合并冲突:
对应的本地代码仓和冲突的文件都会出现感叹号的标签,如下图所示
2)、 查看冲突文件
此时可以单独对每个冲突文件进行 Edit conflicts
, 或者直接如下图所示对整个本地代码仓进行 Resolve
操作。
将会弹出所有的冲突文件列表,冲突文件显示为红色,如下图所示。双击列表中的文件,或右键文件选择 Edit conflicts
来对冲突进行手动处理。
3)、解决冲突
在编辑冲突界面,左侧MERGE_HEAD
为远程仓库的内容,右侧 HEAD
为当前本地仓库中的内容,最下面Merged
为合并后的最终内容,如下图
根据需要可以选择
- 左边或右边的内容作为合并的结果,也可以按照从左到右,或从右到左来进行合并结果,这些操作是以当前光标所在行,或选中行作为操作基础的。
- 可以直接Copy对应的内容放在合并的文件中,来作为最终的合并结果。
【注意】
- 一般操作时,左边的
MERGE_HEAD
为远程仓库内容,需要进行保留,然后将右边本地仓库修改的内容添加到合适的位置。 - 编辑合并文件结束之后,保存时要选择 Mark as resolved,以标记该冲突文件已被解决。
- 然后继续对列表中其它冲突文件做同样的合并操作,直到所有冲突文件全部被修复。
4)、提交合并内容
修复完冲突之后,需要将合并的内容作为一个新的提交,进行commit
,并git push
到远程代码仓。
注意事项
- 冲突的文件显示中,红色的部分表示远程仓库和本地仓库中此次编辑的内容。需要解决红色标识的内容。
- 合并解决后需要最终的文件中所有的
????
行都被编辑修改掉