在git中查看对已删除文件的更改

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,我分支到,在其中进行以下更改:

  1. 删除 colors.txt
  2. 添加red.txt以下内容:

    red
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加green.txt以下内容:

    green
    
    Run Code Online (Sandbox Code Playgroud)
  4. 添加blue.txt以下内容:

    blue
    
    Run Code Online (Sandbox Code Playgroud)
  5. 添加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.txtpurple.txt)?

luc*_*ash 5

您可以使用以下命令在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)