git-删除本地但文件存在于远程时​​的合并冲突


116

我是git的新手,我想知道应该如何进行合并,在本地仓库中,我已经删除了master分支上的几个文件,但是这些文件存在于远程master分支中。

执行git-merge之后,它显示已发生的冲突。

使用git gui可以显示本地文件已删除,而远程分支文件中有内容。

如何防止这些文件冲突?有使用git gui的简单方法吗?

非常感谢


过去,我要做的一件事是将“已删除”文件保留在源代码管理中,但将它们从项目/ makefile /任何文件中排除。至少对于合并冲突,这是一个临时的解决方法。
Mark Rushakoff 2010年

2
您可以使用解决任何合并冲突的方式来解决它:将所需版本(文件或缺少文件)添加到索引,然后提交。你想要哪一个?
卡斯卡贝尔


@MarkRushakoff我会再说一句您的建议:“当我遇到需要解决冲突的情况时,我只是解决不了那些问题,只是掩盖了他们,以便将来他们咬人(可能不是我)”。对于想给项目带来更多问题的人来说,这确实是一个很好的建议。
Victor Yarema,

Answers:


155

您应该按照自己的意愿解决冲突。如果确实应该删除该文件,并且您将要发布的更改发布到原始位置,请再次删除它:

git rm path/to/file

如果实际上应该仍然跟踪该文件,则添加它(工作树中的版本将是原始版本):

git add path/to/file

完成上述任一操作以解决冲突后,请提交合并。


我有几个文件,都在同一目录中,并且都带有相同的后缀。是否有一种快捷方式可以一次将其全部删除,同时将其余文件保留在目录中?
Chiborg

@chiborg:这只是一个壳问题。cd到目录,然后git rm *.ext。您的外壳程序(不是Git)将扩展*.ext为所有匹配的文件名。
卡斯卡贝尔2011年

如果我要保留一些文件?git rm没有-i标志。
Chiborg

@chiborg:您说过要删除具有给定后缀的所有内容,而保留其他所有内容。我就是这么告诉你该怎么做的。还是你的意思git rm *-suffix.ext?一样的区别。如果您在确定如何使用Shell通配符时遇到问题,请在unix.stackexchange.com上询问。如果您知道无法通过遍历来完成所需的操作,请使用rm -i并遵循git add -u以选择删除的内容。
卡斯卡贝尔2011年

2
@Jefromi,如果要指定-s recursive -X ours,为什么还需要git rmgit add
Noel Yap

27

作为已接受答案的补充提示,在“我们删除”中,如果您希望查看对已删除文件所做的更改,以便可以将这些更改应用于其他地方,则可以使用:

git diff ...origin/master -- path/to/file

如果是“被他们删除”的情况,并且您想查看更改以便可以将其应用到其他地方,则可以使用:

git diff origin/master... -- path/to/file

6
是!如果您不想只是散散正在合并的更改,例如当我刚重命名文件或在删除文件之前将其内容移动时,这就至关重要。
爱德华·安德森

8
提醒您:在重新定级期间发生冲突时,此功能不起作用。需要明确像git diff mybranch@{1}...origin/master -- path/to/file
nschum

@nschum谢谢!这正是我想要的。
Chuim

2
您也可以使用git diff --base(请参阅我的其他答案)。
多里安·马尔卡尔

嗨,约瑟夫,尽管这个答案看起来很有希望,但我仍然很困惑。如果您有时间,我希望您在这里回答:stackoverflow.com/q/63044843/470749谢谢!
瑞安

9

在Git GUI中,选择冲突的文件,然后右键单击显示冲突文本的主文本区域。

在出现的上下文菜单中,您可以选择使用“远程”或“本地”。因此,如果文件被远程删除,则可以选择“远程”在本地传播删除,反之亦然。

花了我一个月的时间来弄清楚...如果Git GUI确实有文档,那就太好了...


4

评分最高的答案集中在解决冲突的方法上。

在此之前,您可能想知道远程控制器在本地删除的文件中进行了哪些更改。

为此,您可以通过以下方式查看更改:

git diff --base

来自https://git-scm.com/docs/git-diff#Documentation/git-diff.txt--1-base

将工作树与“基本”版本进行比较。索引仅包含未合并条目的这些阶段,即解决冲突时。



0

在EGit中,我也发现了问题。我的解决方案是:

  • 使用了Git Staging视图。
  • 双击未分级更改中显示的每个文件以打开比较器
  • 单击“从左到右全部复制”图标
  • 保存文件(它将从未暂存的列表中消失)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.