为什么git不会将无冲突的更改自动合并到本地修改的文件中?

时间:2012-06-27 09:40:48

标签: git merge

定期执行git pull我注意到命令有时会以

之类的错误结束
Your local changes to the following files would be overwritten by merge:  
app/Ribbon.xaml  
Please, commit your changes or stash them before you can merge

在这个特殊情况下,我在本地修改了这个文件中的一行,并且它在存储库中的新版本也改变了一个遥远的行 - 没有冲突,没有重命名,行结尾没有变化,没有子模块。所以在这种情况下,我希望git自动合并更改,而不需要git commitgit stash ...
我知道git能够自动合并更改(通常会这样做),但在这种情况下不能。

问题是:什么可能阻止git自动合并无冲突的更改(进入本地修改的文件)?

我想,在我的问题中可能会漏掉一些数据。如果是这样,请告诉我还应该检查什么。

<小时/> [27.JU.2012 14:15]根据答案中的提示,拒绝将任何更改合并到本地修改的文件中是git的正常策略。考虑到这一点,我会将问题改为如何让git自动将更改合并到本地修改的文件

2 个答案:

答案 0 :(得分:0)

我认为这只是git的自然行为。因为您的文件没有暂存或提交,git实际上并不知道您要对文件做什么。 git最好拒绝拉动,而不是猜测你对文件的意图。我通常在拉动之前存储我未提交和未分级的更改,然后在之后应用存储。

答案 1 :(得分:0)

Git处理它的存储库中的文件,位于项目根目录下的.git /目录下。

Git在进行拉动和合并时使用此存储库进行比较。

在你的情况下,Git足够聪明,可以注意到你已经进行了更改,但没有添加或提交它们,因此git将无法使用它们。

您收到消息,即使更改位于单独的代码区域,因为您尚未将文件实际添加到git中,而git实际上并不知道是否存在冲突。 ..直到git'看到'文件。如果您git add然后git commit该文件,那么它就在存储库中,那么git可以在其​​上“工作”,如果更改位于不同的区域,它将能够执行该操作自动合并您希望看到。

所以它给出了这个信息。

您的选择是:

  • 添加并提交本地文件,然后git可以执行合并。

  • 存储本地更改以将其保存在一边,然后拉出新服务器文件。

  • 使用当前更改创建分支 - 使用checkout,然后切换回master并使用reset。