自从我开始在这个设备上开始工作以来,我正在从一个修改XML文件的提交中恢复。当我运行git pull时,我会在文件上遇到合并冲突,但不再需要本地更改,所以我只需要执行git reset --hard,然后再确保不会遇到任何冲突。再次拉动之后,我仍然会遇到合并冲突 - 如果没有本地更改,不应该只是做一个快进并更新文件?如果没有,为什么我能够毫无问题地推动这些变化呢?
为了尝试修复此问题,我只需删除文件的本地副本,以便git pull创建它,但我再次看到不再存在的文件的合并冲突。当我没有文件时,我怎么会有冲突?它不应该没有问题吗?
答案 0 :(得分:1)
执行git reset --hard
(没有其他参数)会将当前HEAD重置为HEAD-so to self-their,并且还会丢弃工作目录中所有未提交的更改。所以你最终得到了Git跟踪的所有文件的干净状态。工作目录的这种干净状态实际上是执行合并的必要条件(除了一些特殊情况)。但它不会阻止您发生合并冲突。
当合并的两个分支具有冲突的文件更改(而不是状态)时发生合并冲突,Git无法自行解决。
在您的情况下,您正在合并的分支 - 如您所说 - 对文件进行了重大更改。由于您遇到合并冲突,这意味着您还已对同一文件提交了一些更改,这些更改是不兼容的。所以你确实对文件进行了本地更改。
您尝试通过删除本地文件来解决此问题。但是,文件删除 是对文件的更改:它正在删除其内容。因此,在合并时,您可能会缩进要删除的文件,使其再次不清楚最终版本应该是什么(应该立即删除文件,是否应该使用合并版本,或者两者都应该合并)某种方式?)。因此,您仍然需要解决合并冲突。
如果你不关心你在本地对文件做了什么,你可以轻松地解决合并冲突,只需采用远程版本并保持原样:
git pull
开始合并。您应该在该文件上遇到合并冲突。git checkout origin/master -- path/to/that/file.xml
检查远程版本(将origin/master
调整到远程分支,以及文件路径)。git add path/to/that/file.xml
然后您将处于成功合并分支的状态,并通过获取该文件的远程状态来解决合并冲突。