Git没有显示任何冲突,并且正在覆盖我的本地副本

时间:2012-07-06 19:52:21

标签: git github merge-conflict-resolution

我在git上的例程一直很简单:

git add -A
git commit -m 'the changes I made'
git pull
# resolve conflicts
git push

然而,由于一些不明原因,尽管与起源有很多冲突,但在拉动之后,我没有任何冲突,如果没有我的许可,它会强制更新我的本地副本。这些内容:'2个文件已更改,2个插入(+),6个删除( - )'。但就我而言,冲突不应该通过简单的合并来解决,而是需要我手动解决冲突。为什么git不让我做手动冲突解决?提前致谢! 注意:我的git命令都没有强制选项-f

2 个答案:

答案 0 :(得分:5)

没有参数的

git pull或多或少等同于git fetch && git merge origin/<upstream_branch>。使用pull代替fetchmerge,您允许git尝试合并到您的本地分支。如果合并发生没有冲突,您的本地人将会看到强制更新&#34;因为它能够在没有您干预的情况下理清远程文件版本与您自己的文件之间的差异。

在没有看到您的代码的情况下调试发生的事情有点难,但试试这个:

git fetch ;# fetch the remote changes
git diff HEAD origin/<branch> ;# diff your local branch with the remote's copy of <branch>

来自git diff的输出应该让您知道发生了什么。如果您想进一步关注它,请尝试git merge --no-commit origin/<branch>,然后发出git diff --cached。这将自动向您展示git自动合并的变化,并且应该允许您确定什么是什么。

答案 1 :(得分:0)

如果git设法解决git pull期间的所有冲突,那么它将进行提交。这并不意味着它必然使事情正确。正如您所注意到的,根据更改,您可能需要进行一些手动修复。

为此,请在拉动后在工作树中进行更正,然后暂存(例如使用git add -u)并使用git commit --amend修改合并提交。

这将创建一个新的合并提交,它将替换git制作的合并提交,包括您的更正。

然后您可以像往常一样推送结果。