我没有的文件上的Git合并冲突?

时间:2014-04-08 11:38:16

标签: git merge merge-conflict-resolution

自从我开始在这个设备上开始工作以来,我正在从一个修改XML文件的提交中恢复。当我运行git pull时,我会在文件上遇到合并冲突,但不再需要本地更改,所以我只需要执行git reset --hard,然后再确保不会遇到任何冲突。再次拉动之后,我仍然会遇到合并冲突 - 如果没有本地更改,不应该只是做一个快进并更新文件?如果没有,为什么我能够毫无问题地推动这些变化呢?

为了尝试修复此问题,我只需删除文件的本地副本,以便git pull创建它,但我再次看到不再存在的文件的合并冲突。当我没有文件时,我怎么会有冲突?它不应该没有问题吗?

1 个答案:

答案 0 :(得分:1)

执行git reset --hard(没有其他参数)会将当前HEAD重置为HEAD-so to self-their,并且还会丢弃工作目录中所有未提交的更改。所以你最终得到了Git跟踪的所有文件的干净状态。工作目录的这种干净状态实际上是执行合并的必要条件(除了一些特殊情况)。但它不会阻止您发生合并冲突。

当合并的两个分支具有冲突的文件更改(而不是状态)时发生合并冲突,Git无法自行解决。

在您的情况下,您正在合并的分支 - 如您所说 - 对文件进行了重大更改。由于您遇到合并冲突,这意味着您已对同一文件提交了一些更改,这些更改是不兼容的。所以你确实对文件进行了本地更改。

您尝试通过删除本地文件来解决此问题。但是,文件删除 是对文件的更改:它正在删除其内容。因此,在合并时,您可能会缩进要删除的文件,使其再次不清楚最终版本应该是什么(应该立即删除文件,是否应该使用合并版本,或者两者都应该合并)某种方式?)。因此,您仍然需要解决合并冲突。

如果你不关心你在本地对文件做了什么,你可以轻松地解决合并冲突,只需采用远程版本并保持原样:

  1. 首先,使用git pull开始合并。您应该在该文件上遇到合并冲突。
  2. 由于您不关心本地版本,只需使用git checkout origin/master -- path/to/that/file.xml检查远程版本(将origin/master调整到远程分支,以及文件路径)。
  3. 现在该文件与您要合并的远程分支中的状态完全相同。
  4. 添加更改:git add path/to/that/file.xml
  5. 如果需要:解决其他合并冲突
  6. 提交合并以完成它。
  7. 然后您将处于成功合并分支的状态,并通过获取该文件的远程状态来解决合并冲突。