首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git format-patch :我如何让它忽略已经合并的提交?

git format-patch :我如何让它忽略已经合并的提交?
EN

Stack Overflow用户
提问于 2011-12-10 16:33:20
回答 1查看 1.4K关注 0票数 1

我正在使用my copy of the perl repository on github,并创建了一个标题为“perl-d-add-tests 2”的分支,用于进行一些更改,其中我提交了一些提交。我向上游提交了这些提交,并将它们应用到"blead“(主要的perl开发分支)中。我从上游存储库中提取数据,并从blead中执行"git merge“到”perl-d-add-tests 2“中,现在我再次尝试在那里运行"git format-patch blead”,结果如下:

代码语言:javascript
复制
shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ git st
# On branch perl-d-add-tests-2
nothing to commit (working directory clean)
shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ git diff blead | cat
shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ git format-patch blead
0001-Made-c-line_num-working-again.patch
shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ 

可以看到,"git format-patch“仍然生成已经应用的提交。见鬼?

我如何防止"git format-patch“这样做呢?我只想要独特的更改,以前当它发生的时候,我被告知要打开另一个分支,并从那里"git cherry-pick“提交,但显然这个解决方案不能扩展,因为它会把我的存储库弄得到处都是分支。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-10 19:42:28

一个简单的选项是指定您想要的提交,而不包括较旧的、已经应用的提交。引用提交的通用语法可以在git help rev-parse中找到;例如,在本例中,说“我当前分支上的最后5个提交”将如下所示

代码语言:javascript
复制
git format-patch HEAD~5

另一种可能是根据当前的blead分支重新设置perl-d-add-tests-2功能分支的基础。IIRC,在将此分支应用于blead时,您先前在此分支上的工作被意外地压缩到单个提交中,因此在这种情况下,您可能需要进行比预期更多的手动清理。如果你想尝试这种方法,我建议在一次性分支上进行,这样即使失败了,你也不会失去任何东西。

代码语言:javascript
复制
# pull in upstream changes:
git checkout blead
git pull

# create and switch to a new branch "tmp":
git checkout -b tmp perl-d-add-tests-2

# rebuild this branch against your current "blead" branch:
git rebase blead

如果您喜欢结果,您可以使用临时分支来代替您的功能分支:

代码语言:javascript
复制
# delete current feature branch:
git branch -d perl-d-add-tests-2

# rename the temporary branch back to the feature branch's name
git branch -m tmp perl-d-add-tests-2

# switch to the recreated feature branch:
git checkout perl-d-add-tests-2

# generate patches against blead:
git format-patch blead

请注意,在git rebase blead步骤中,您还可以使用-i选项,以交互方式指定将哪些提交重新应用于blead的当前提示。这将在提交议程上打开要重新应用的$EDITOR;如果沿着这条路线走下去,您可能希望显式删除该议程中已经应用于上游blead的提交。

最后,您说为此创建一个新的分支是不能扩展的,因为您会将不需要的分支散落在您的存储库中。然而,Git很乐意让你随时重命名(git branch -m)或删除(git branch -d)分支。唯一可能导致问题的方法是,如果您下游的其他存储库依赖于已删除或重命名的分支。但在常见的情况下,没有人从本地功能分支中拉出,并且您计划在准备好时提交上游分支,没有什么可担心的。因此,如果你觉得挑樱桃的建议听起来不错,你可以这样做,并删除你的功能分支的旧版本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8455379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档