1

我正在与我的一所大学一起在 git 工作。我在一个分支上工作,他在 master 上工作。我在我的分支上做了一些与他的文件相关的工作,我决定给他发送一个补丁文件。我创建了补丁git format-patch,并将其发送给他。当他尝试使用git am他得到以下消息应用补丁时:previous release directory

这可能是因为补丁来自不同的分支。

有没有办法让他使用主分支上的补丁?

注意:我使用的是git am,而不是git apply保留为码头生成的提交 ID。我仍然希望提交者在他的本地存储库中成为我。

4

2 回答 2

1

在处理无法正确应用的补丁时,请考虑使用两种解决方案之一:(
来自bugdromer的文章):


处理它的最简单方法是:

  • git am --abort,
  • 手动应用补丁patch -p1 < PATCH
  • 亲手解决冲突,
  • 最后提交git commit -a.

但是在这种情况下,您将不得不重写提交消息,这不是很好。还有一个更聪明的方法。


可以在 中找到对应的补丁文件.git/rebase-apply,并命名为“ 0001”(补丁所在目录的名称最近发生了变化,这个是用1.7.4.1测试的)。
在此刻:

  • 您可以git apply用于应用补丁,这是补丁命令的 git 等效项
  • 并以通常的方式修复冲突文件(检查.rej文件,将它们与冲突文件进行比较,最后将修复的文件添加到索引中):

例子:

$ git apply PATCH --reject
$ edit edit edit
$ git add FIXED_FILES
$ git am --resolved

你就完成了!
换句话说,由于git am没有改变索引,你需要

  • git apply --reject补丁(存储在 中.git/rebase-apply),
  • 手动解决冲突,
  • 添加更改的文件和
  • 最后告诉 git 你解决了这个问题。

这种情况下的好处是:

  • 您无需重新编辑提交消息,
  • 如果您正在应用一组补丁(即您正在使用git am PATCHESPATCHES邮箱在哪里),则不必一次git abort又一次run git am
于 2012-12-02T12:47:02.650 回答
0

尝试以下--3way选项git am

-3, --3way
   When the patch does not apply cleanly, fall back on 3-way merge if
   the patch records the identity of blobs it is supposed to apply to
   and we have those blobs available locally.
于 2012-12-02T14:03:52.077 回答