1

定期做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.JUN.2012 14:15] 根据答案中的提示,git 的正常策略是拒绝将任何更改合并到本地修改的文件中。考虑到这一点,我会将问题改写为如何使 git 自动将更改合并到本地修改的文件中

4

2 回答 2

0

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

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

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

即使更改位于单独的代码区域中,您也会收到消息,因为您还没有真正将文件添加到 git 并且 git 实际上并不知道是否会有冲突......直到 git '看到'文件。如果你git add然后git commit是文件,那么它在存储库中,那么 git 可以在它上“工作”,如果更改在不同的区域中,它将能够执行你想要看到的自动合并。

所以它给出了这个信息。

您的选择是:

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

  • 存储本地更改以将它们保存在一边,然后提取新的服务器文件。

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

于 2012-06-27T11:32:37.497 回答
0

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

于 2012-06-27T09:45:34.150 回答