我在git上的套路一直很简单:
git add -A
git commit -m 'the changes I made'
git pull
# resolve conflicts
git push
然而,由于某些未知原因,尽管与源有很多冲突,但在 pull 后,我没有得到任何冲突,并且在未经我许可的情况下强制更新我的本地副本。类似这样的内容:“2 个文件已更改,2 个插入 (+),6 个删除 (-)”。但就我而言,冲突不应该通过简单的 merge 来解决,而应该需要我这边手动解决冲突。为什么 git 不让我手动解决冲突?提前致谢! 注意:我的 git 命令都没有强制选项 -f
最佳答案
git pull
没有参数或多或少等同于 git fetch && git merge origin/<upstream_branch>
.通过使用 pull
而不是 fetch
和 merge
,您允许 git 尝试 merge 到您的本地分支。如果 merge 没有发生冲突,您的本地将看起来是“强制更新”,因为它能够在没有您干预的情况下解决您文件的远程版本与您自己的版本之间的差异。
在没有看到代码的情况下调试正在发生的事情有点困难,但试试这个:
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 自动 merge 了哪些更改,并且应该允许您确定什么是什么。
关于Git 没有显示任何冲突,并且正在覆盖我的本地副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11368811/