Git pull只请求bitbucket上的某些提交

时间:2013-08-05 22:59:51

标签: git command-line bitbucket

如果您只想提取请求某些提交但不是全部提交会发生什么?

说你有一个回购,Foo,并将该回购分拆为Bar。然后你将提交1和2提交给Bar。我只想把提交2拉回Foo,我该怎么做?

我使用bitbucket作为git主机,所以我很确定我需要在命令行上执行此操作。 THX。

2 个答案:

答案 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>或更好。