我正在尝试使用其他人使用
git-format-patch
创建的 git 补丁。该补丁是针对 HEAD 后面的一次提交而制作的,但据我了解,这应该不重要。当我运行 git am 0001.patch
时,我收到错误:
error: source.c: does not match index
我不太熟悉 git patch 的格式,但看起来索引不匹配,但源确实匹配。
解决这个问题的最佳方法是什么?手动更改索引以匹配?或者我应该
git-apply
然后在提交时复制作者和描述信息?
来自 J.C. Hamano(Git 维护者)本人,这是关于:
修补应用程序并合并到具有干净索引的脏工作树中。
- 脏工作树是您有未添加到索引的更改的地方。
不脏的工作树就是干净的工作树。- 脏索引是您已添加更改的位置(换句话说,“
”将报告一些更改)。git diff --cached
干净的索引与 HEAD 匹配。
随着最近的 Git 版本,您可以中止:
要恢复原始分支并停止修补,请运行“
”。git am --abort
然后:
对于那些无法决定的人来说,最简单的事情可能就是将更改保存起来以供以后使用。
$ git stash save "Random changes that are not ready"
然后重做“
”或“git pull
”。git am
“”是害怕承诺的人的终极工具。git stash
重做“
”或“git pull
”后,您可以重播您隐藏的本地更改:git am
$ git stash pop
注意:脏树的来源之一可能是
autocrlf
设置(如在 msysgit 问题 81 中),因此请确保将其设置为 false。core.whitespace
设置。
OP在评论中提到:
在尝试运行
之前,我确实运行过git am
,所以我认为这不是问题所在。git stash
我最终做的是运行,然后手动修复问题,然后运行 'git am -3 patch.patch
'。git am --resolved
注意:在最近的Git1.7.2 Release Notes中:
当冲突解决最终使补丁成为无操作时,来自“
”的消息已得到改进。git am -3
对我来说,由于我使用的是旧版本的
git
(centOS-6 发行版),我可以通过以下方式解决问题:
git update-index --refresh
git am ${patch_filename}
要了解更多关于其工作原理的信息,请查看此处的原始来源:
我有点惊讶我们没有完成“预先刷新一次” 过去 5 年里没有人遇到过这种情况。看来 我从 git-applymbox 继承了这种行为;-)
在开始和重新启动时刷新一次是明智的 与“am --resolved”。