如果您只想提取请求某些提交但不是全部提交会发生什么?
说你有一个回购,Foo,并将该回购分拆为Bar。然后你将提交1和2提交给Bar。我只想把提交2拉回Foo,我该怎么做?
我使用bitbucket作为git主机,所以我很确定我需要在命令行上执行此操作。 THX。
答案 0 :(得分:5)
我认为git cherry-pick
在这里可能更好,但我喜欢使用git rebase -i
,部分原因是因为它太多功能,你可以重复使用这些知识。
(1)首先,创建一个新的分支(将是Pull Requested):
git checkout -b commit2_PR
(2)然后,交互式rebase(-i
用于交互式):
git rebase -i commit2_PR^^ commit2_PR
注意:第一个参数需要是最后(最早)提交的提交的父。
(3)你的编辑将被激活最后2次提交 - 并在底部提供非常有用的指示。现在删除Pull Request中不需要的提交行(在这种情况下,删除提交1,只保留提交2)。现在,保存并退出,git rebase
将完成它。
(3.1)如果存在合并冲突,它将停止,您必须按照通常的方式按照它给出的说明进行修复。当干涉历史时,这种情况经常发生。
(4)最后,这个新的分支commit2_PR
- 你拉请求那个分支。完成。
我强烈建议您阅读有关rebase(和/或Google搜索)的联机帮助页,并尝试几次。您可以使用git rebase
参数进行简化,但我会留下您阅读联机帮助页而不是在此复杂化... 不要害怕!!! 注意因为你已经建立了一个新的分支,如果你把它弄糟或者有多糟糕也没关系 - 只要删除那个分支然后再去另一个分支。原来的分支仍在那里,没有改变。
你可以做些很棒的事情来让你的Pull Request更容易阅读 - 压缩(组合)提交,重新提交提交,单独提交(使用git add -p
并在其间创建新提交),编辑提交消息,更改提交内容就好像你是第一次提交它们一样。
以这种方式重写历史是完全没问题的,前提是你尚未推进并且它仍然是私有的。这就像在小说出版之前编辑小说更有意义,更容易阅读并且错误更少。 (例如,您需要更正错误,但读者无需知道何时更正,如果尚未发布错误。)
答案 1 :(得分:0)
提交2已在提交1之上进行。这意味着它可能具有依赖性。如果Bar贡献者在Foo mergebase之上重新提交commit2,然后将其重新提交为独立的pull请求,则可以使用git cherry-pick <commit2>
或更好。