2012-07-06 94 views
2

我在git的常规一向很简单,我没有得到任何冲突,没有我的许可,它强制更新我的本地副本。沿着这些线:'2个文件改变,2个插入(+),6个删除( - )'。但就我而言,冲突不应该从简单的合并中解决,而应该从我这边要求手动解决冲突。为什么git不让我去做手动冲突解决?提前致谢! 注意:我的git命令都没有强制选项-fGit是没有显示任何冲突,并覆盖我的本地副本

+2

'git'没有这样做(以我的经验),所以你可能会忘记一些看似情况的信息。也许你有一个错误的石器时代版本的'git'? 'git --version'告诉你什么? – bitmask 2012-07-06 19:56:41

+0

尝试'git fetch'然后'git merge'(查找命令行)。默认情况下'git pull'会自动尝试“冲突”解决方案,并且根据我的经验,如果算法放弃了冲突,则不会这样做。 – Robert 2012-07-06 20:06:50

+0

@Robert:但是这与'git pull'没有什么不同? – 2012-07-06 22:33:19

回答

5

git pull没有参数或多或少相当于git fetch && git merge origin/<upstream_branch>。通过使用pull而不是fetchmerge,您允许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自动合并了哪些更改,并且应该允许你确定什么是什么。

0

如果git设法解决git pull期间的所有冲突,那么它将进行提交。这并不意味着它一定是正确的。正如你已经注意到的,根据你的变化,你可能需要做一些手动修复。

要做到这一点,请在拉出后在工作树中进行更正,然后对其进行分级(例如,使用git add -u),并使用git commit --amend修改合并提交。

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

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