2011-03-10 59 views
242

我在github上分支了一个项目,并且成功地对我的本地主人进行了更改,并在github上推送到原点。我想发送一个拉取请求,但只想包含最后一次提交。 github.com上的pull request UI显示了最后9次提交,我不知道如何过滤掉。在GitHub上发送拉取请求,仅提供最新的提交

我想了解如果我应该创建一个新的本地分支,检查出来,并以某种方式重置或rebase上游?然后应用我的最后一次提交从我的主人身份证到新的本地分公司,并将其用于拉请求?

我试图让概念正确,并找出正确的命令行来做我所需要的。

+0

如果您对所有其他提交执行拉取请求,会发生什么情况?我认为git足够聪明,可以忽略(或通过)已提交的提交? – jayarjo 2012-06-29 09:38:17

+2

假设上游尚未接受或不接受干预承诺。 – 2014-06-08 21:31:00

+0

@jayarjo我例如做了其他更改,我不想向上游发送。例如,对git的更改将忽略主存储库。 git不容易。 – Martin 2017-07-01 09:17:40

回答

264

您需要基本创建一个新分支& cherry-pick您想添加到它的提交。

注意:您可能需要这些结帐/摘樱桃命令前

git remote add upstream <git repository>

git remote update

git checkout -b <new-branch-name> upstream/master 

git cherry-pick <SHA hash of commit> 

git push origin <new-branch-name> 

之后,你会看到在github上<new-branch-name>分支,切换到它并可以提交拉取请求随着你想要的改变。

+0

伟大的解决方案,非常感谢! – Max 2011-03-15 19:12:19

+0

谢谢,这个解决方案也帮助了我。这里是一个链接,说明如何樱桃采摘在git中工作:http://technosophos.com/content/git-cherry-picking-move-small-code-patches-across-branches(向下滚动并忽略PHP错误消息)。 – dubbaluga 2012-12-23 20:35:22

+29

在运行git checkout -b upstream upstream/master之前,我还需要'''git remote add upstream '''和''git remote update'''。 – plainjimbo 2013-05-07 21:13:58

51

创建一个新的分支从最新开始提交,这也是在源库:

git branch new-branch origin/master 
git checkout new-branch 

然后使用git cherry-pick得到单个提交你想要拉入请求。如果与该提交这个分支被称为feature和你想要的是最新提交的这个分支提交,这将是

git cherry-pick feature 

假设该补丁适用不冲突,你现在有一个分行,你可以做你的拉请求。

第二步,您现在需要决定如何处理feature分支。如果您尚未在此分支上发布您的更改,最好的过程可能是在新分支上重新分配此分支(并且除去最后一次提交,如果这不是由git rebase自动完成)。

+0

我在摘樱桃。没有添加提交但未跟踪的文件存在(使用“git add”来跟踪)。一切都在我的主人,但我需要从上游做我的分支。 – 2011-03-10 13:22:20

+5

如果'feature'已经在'origin/master'提交,'cherry-pick'中没有任何事情发生。新分支应该来自'上游/主人'(即Kevin Hakanson的回答) – ohho 2013-01-31 10:32:51

25

我最终陷入了一种分叉状态,并希望向原始项目提交请求的情况。

我:

  • orignal_project
  • forked_project(沙从原来的项目发布:9685770)
  • my_fork(沙从分叉项目创建:207e29b)
  • 在我的叉子提交(SHA:b67627b),我想提交回原始项目

要做到这一点,我:

  1. 创造了一个新的分支从这里原来项目分叉
  2. 从原始项目
  3. 樱桃采摘全部拉到SHA提交我想提出一个拉请求
  4. 推了这一切到Github上

的Git命令是这样的:

  1. 混帐分支我的特征请求9685770
  2. git的结帐我的特征请求
  3. 混帐拉https://github.com/original_project/original_project.git
  4. git的樱桃挑选b67627b
  5. 混帐推起源我的特征请求

然后,我选择了我的功能请求作为我的请求到原始项目的分支。

+0

也许有一个更简单的方法,但这对我有用。 – 2013-02-27 17:39:23

+3

这些说明是最彻底和易于遵循的。为我工作过。谢谢。 – 2013-12-20 13:52:05

5

这几乎是为我工作:

git checkout -b upstream upstream/master 

git cherry-pick <SHA hash of commit> 

git push origin upstream 

唯一的区别是这样的:

git push origin upstream:upstream 

我需要改变的最后一行,这样混帐推将使上游分支在我的GitHub库所以我可以从它做出公关。

1

解决方案创建一个新的(临时)分支,樱桃挑选和创建该分支的拉请求不满足我。我不想改变我的资料库,使一组可用的提交,所以我想出了以下替换:

首先创建补丁文件的所有感兴趣的提交:

git format-patch -1 <sha> 

如果提交的兴趣恰好是您可以使用的最后一个HEAD而不是<sha>

现在,你可以发送补丁到源代码库的维护者,谁可以申请他们:

git branch new-branch <master or some older commit where the fork diverged> 
git checkout new-branch 

git am < <the patch> 
... 

git checkout master 
git merge new-branch 

最后这看起来应当是一样的,如果一个临时党支部被拉入请求合并,但而不需要在fork-repository中增加额外的分支。

3

我已经做了提交,我希望能够作为一个pull请求回到当前分支上。

所以我检查了一个新的分支

git checkout -b isolated-pull 

这里就是我的解决方案不同于@Kevin Hakanson潜在的,因为我需要这个分支重置我想从

到中DIFF历史的地方
git reset --hard [sha-to-diff-by] 

而且樱桃挑提交从中我想创建一个孤立的拉动请求

git cherry-pick [my-isolated-commit-sha] 

最后将其推到远程

git push origin isolated-pull 

和拉请求DAT市。

相关问题