2013-08-05 61 views
3

如果您只想要请求一些提交但不是全部,会发生什么?Git pull只请求在bitbucket上的某些提交

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

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

回答

5

我认为git cherry-pick在这里可能更好,但我喜欢使用git rebase -i,部分原因是因为它是如此多才多艺,您可以重用知识。

(1)首先,创建一个新的分支(将在上拉请求):

git checkout -b commit2_PR

(2)然后,交互变基(-i为交互式):

git rebase -i commit2_PR^^ commit2_PR

注意:第一个参数需要是最后(最旧)感兴趣的提交的

(3)您的编辑器将在最后2次提交时触发 - 并在底部提供非常有用的说明。现在在Pull Request中删除不需要的提交行(在这种情况下,删除commit 1,仅保留commit 2)。现在,保存并退出,并且git rebase将做它的事。

(3.1)如果存在合并冲突,它将停止并且您必须按照通常的方式修复它,并遵循它提供的说明。在干涉历史时,这种情况经常令人惊讶。

(4)最后,这个新的分支commit2_PR - 你拉请求那个分支。完成。


我强烈建议你阅读的底垫的手册页(和/或谷歌搜索),并用它进行试验几次。您可以通过git rebase的论点进行简化,但我会留给您阅读联机帮助页,而不是在此处将其复杂化... 不要害怕!请注意,因为您已经创建了一个新分支,所以如果您将它分解或分配有多糟 - 无关紧要 - 只需删除该分支并再次执行即可。原来的分支仍然在那里,没有改变。

有很棒的东西可以让你的Pull请求更容易阅读 - 压缩(合并)提交,重新排序提交,单独提交(使用git add -p并在两者之间创建新的提交),编辑提交消息,更改提交内容为如果你是第一次提交它们等等。

用这种方式重写历史记录是完全正确的,只要你还没有推送它,它仍然是私人的。这就像在小说发表之前编辑一本小说,因此它更有意义,更容易阅读,错误更少。 (例如,您需要更正错误,但是如果尚未发布,那么读者不需要知道。)

0

提交2已在提交1之上进行。这意味着它可能具有依赖性。你可以使用git cherry-pick <commit2>或更好的,如果酒吧贡献者将在Foo mergebase之上重新定义commit2,然后重新提交它作为独立的pull请求。

+0

我做了更多的挖掘,这里有一个类似的帖子:http://stackoverflow.com/a/1405189/786675,你在说什么? – the1plummie