我想使用git-format-patch
应用别人创建的git补丁。该补丁是针对HEAD之前的一个提交所创建的,但据我所知这不应该有影响。当我运行git am 0001.patch
时,出现以下错误:
error: source.c: does not match index
我对git补丁的格式不太熟悉,但似乎索引不匹配,但源代码确实匹配。
如何最好地解决这个问题?手动更改索引以匹配吗?还是应该使用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
设置。
评论中提到:
在尝试运行
git am
之前,我确实运行了git stash
,所以我不认为那是问题所在。
我最终做的是运行git am -3 patch.patch
,然后手动解决问题,然后运行'git am --resolved
'。
注意:在最近的Git1.7.2版本发布说明中:
当冲突解决导致补丁无法执行时,“
git am -3
”的消息已得到改进。
我使用的是旧版本的git
(centOS-6发行版)。
我通过以下步骤解决了这个问题:
git update-index --refresh
git am ${patch_filename}
想要了解更多原因,请查看此处的原始来源:
"
我很惊讶过去5年中没有人遇到过这个问题,我们似乎还没有进行“提前刷新”操作。看来我从git-applymbox那里继承了这种行为;-)
在开始时和重新启动时使用“am --resolved”合理地进行一次刷新。
"
git am
之前,我确实运行了git stash
,所以我不认为那是问题所在。我最终做的是运行git am -3 patch.patch
,然后手动修复问题,最后运行'git am --resolved`。 - joshdoe