Git中快进合并失败

3
我想先声明一下,我对Git还比较新手。不过这似乎是一个相当简单的情况,我看不出问题来自哪里。以下是情景描述:
我在主分支上有一些未提交的更改,但我不想要它们。我需要进行一个独立的简单更改,以便打包成一个补丁。所以我这样做:
我找到主分支最后一次提交的哈希值,即ffdd99afc89211e9ddc3efa3415b0adaf0076b4b。
然后从我的仓库根目录中执行以下操作:
git branch my_patch ffdd99afc89211e9ddc3efa3415b0adaf0076b4b
git checkout -f my_patch

现在我编辑了三个文件,并添加了第四个文件,然后执行以下操作:

git add [path to the added file]
git status

这里列出了三个已更新的文件和一个新增加的文件。
git commit -a
git status

未找到任何更改。

git format-patch master --stdout > my_patch.patch

到这一步都很顺利。现在我想将这个分支合并回主分支。

git checkout master
git status

未发现任何更改

git merge my_patch

其输出结果为:
Updating ffdd99a..e2754ca 
error: Your local changes to 'Blah.cs' would be overwritten by merge. 
Aborting. Please, commit your changes
or stash them before you can merge.

现在,如果我输入git status,会列出一大堆更改。这对任何人都有意义吗?

1个回答

0
如果你不想在开始时保留更改,可以执行 git reset --hard。如果有未跟踪的文件,也可以执行 git clean -df
至于最后的错误消息,可能与路径大小写有关。这是在 Windows 上使用 msysgit 吗?
如果你正在使用 Windows,请确保将 autocrlf 设置为 false。

好的,这更奇怪了。从我上面离开的地方开始,git status显示了一堆修改过的文件(大约120个),我执行了git reset --hard。我得到的响应是,HEAD现在位于ffdd99a Fixed failing...(Fixed failing....是与ffdd99a相关联的消息)。git status仍然显示相同的120个修改。所以我尝试了git clean -df,只删除了三个空目录。此后,git status再次显示相同的120个修改。我可以执行git checkout my_patch,但它失败了,列出了1个文件本地更改。添加-f可以解决问题。 - Kenneth Baltrinic
从上一个评论开始,git checkout -f my_patch 带我到了 my_patch:此后 git status 显示我是干净的,没有要提交的内容,也没有添加的文件。所以我 git checkout master,回到了那 120 个修改过的文件,我无法让它们消失。而且,在任何一个文件上执行 git diff,都会显示所有行被删除,然后重新添加,但实际上没有任何更改?! - Kenneth Baltrinic
听起来你的代码有行尾问题。 - Adam Dymitruk
我将其添加到我的答案末尾。 - Adam Dymitruk
将autoclr设置为false是解决问题的方法。 - Kenneth Baltrinic
它第一次也把我搞糊涂了 :) - Adam Dymitruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接