3

我在 git 上的套路一直很简单:

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

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

4

2 回答 2

5

git pull没有参数或多或少等同于git fetch && git merge origin/<upstream_branch>. 通过使用pull而不是fetchand merge,您允许 git 尝试合并到您的本地分支。如果该合并发生时没有冲突,您的本地将看起来“强制更新”,因为它能够在没有您干预的情况下整理出您的远程文件版本与您自己的文件之间的差异。

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

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 自动合并的更改,并且应该允许您确定什么是什么。

于 2012-07-06T20:06:42.407 回答
0

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

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

这将创建一个新的合并提交,它将 git 所做的合并提交替换为包含您的更正的合并提交。

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

于 2012-07-06T22:32:36.663 回答