eri*_*tin 5 git git-merge merge-conflict-resolution
假设当我从master 分支出来时,我的repo分支colors.txt上有一个master包含以下内容的文件:
red
green
blue
yellow
Run Code Online (Sandbox Code Playgroud)
然后my-branch,我分支到,在其中进行以下更改:
colors.txt添加red.txt以下内容:
red
Run Code Online (Sandbox Code Playgroud)添加green.txt以下内容:
green
Run Code Online (Sandbox Code Playgroud)添加blue.txt以下内容:
blue
Run Code Online (Sandbox Code Playgroud)添加yellow.txt以下内容:
yellow
Run Code Online (Sandbox Code Playgroud)现在,我需要对master进行一些更改,因此我想合并。但是,有人也更改colors.txt为:
red
green
blue
yellow
orange
purple
Run Code Online (Sandbox Code Playgroud)
在合并期间,我得到的唯一信息是删除了文件colors.txt,那么如何在master上看到对文件的更改,以便我可以适当地解决冲突(在这种情况下,通过添加orange.txt和purple.txt)?
您可以使用以下命令在master上显示对该文件所做的所有更改:
git diff HEAD...master -- colors.txt
Run Code Online (Sandbox Code Playgroud)
在您的情况下,这应该导致以下输出:
red
green
blue
yellow
+orange
+purple
Run Code Online (Sandbox Code Playgroud)
用三个点表示git diff将显示所有提交的更改,这些更改是第二个引用提交的父级,而不是第一个引用提交的父级。因此,使用此操作,您将看到如果尚未删除文件,将合并的所有更改。
通过使用-- colors.txt所显示的更改git diff仅限于该文件。
该命令的更通用版本是
git diff HEAD...MERGE_HEAD -- colors.txt
Run Code Online (Sandbox Code Playgroud)
MERGE_HEAD始终设置为合并的提交,因此可以替换合并的分支名称。使用此方法,您甚至可以设置一个别名以重用此命令:
git config --global alias.merge-diff-theirs "diff HEAD...MERGE_HEAD"
Run Code Online (Sandbox Code Playgroud)
之后你可以做
git merge-diff-theirs -- colors.txt
Run Code Online (Sandbox Code Playgroud)