关于git:在GitHub上发送一个拉取请求,仅用于最新提交

Send a pull request on GitHub for only latest commit

我在GitHub上分配了一个项目,并成功地对本地的主程序进行了更改,并在GitHub上推到了原点。我想发送一个请求,但只想包括最后一次提交。github.com上的pull-request用户界面显示了最后9次提交,我不知道如何过滤。

我试图理解我是否应该创建一个新的本地分支,检查并以某种方式重置或重新设置上游?然后将我的主服务器上一次提交(按ID)应用到新的本地分支,并将其用于拉请求?

我正在努力使概念正确,并找出正确的命令行来做我需要的事情。


基本上,您需要创建一个新的分支&cherry,选择要添加到该分支中的提交。

Note: you might need these before the checkout/cherry-pick commands

git remote add upstream

git remote update

1
2
3
4
5
git checkout -b <new-branch-name> upstream/master

git cherry-pick <SHA hash of commit>

git push origin <new-branch-name>

之后,您将看到Github上的分支,切换到它,并可以提交带有您想要的更改的拉请求。


从最新提交开始创建一个新的分支,该分支也位于原始存储库中:

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

然后使用git cherry-pick获得您想要的请求请求单提交。如果具有此提交的分支称为feature,而您想要的提交是此分支中的最新提交,则这将是

1
git cherry-pick feature

假设这个补丁应用时没有冲突,那么您现在就有了一个分支,您可以执行拉请求。

在第二步中,您现在需要决定如何处理您的feature分支。如果您还没有在这个分支上发布您的更改,那么最好的过程可能是在新分支上重新调整这个分支(并删除最后一次提交,如果git rebase没有自动执行的话)。


最后我遇到了一种情况,我叉了一个叉子,想把一个请求提交回原来的项目。

我曾经拥有:

  • Orignal_项目
  • forked_项目(从sha:9685770的原始项目创建)
  • 我的叉子(从sha:207e29b的叉子项目创建)
  • 在我的fork(sha:b67627b)中,我想要提交回原始项目的一个承诺

为此,我:

  • 在原来项目的分支所在的SHA中创建了一个新分支
  • 从原始项目中全部提取
  • Cherry选择了我想作为请求提交的承诺
  • 全部推到Github
  • git命令类似于:

  • Git分支我的功能请求9685770
  • Git签出我的功能请求
  • git pull https://github.com/original_project/original_project.git
  • 吉特樱桃采摘B67627B
  • Git Push Origin我的功能请求
  • 然后我选择了我的特性请求作为原始项目的请求分支。


    这几乎对我有用:

    1
    2
    3
    4
    5
    git checkout -b upstream upstream/master

    git cherry-pick <SHA hash of commit>

    git push origin upstream

    唯一的区别是:

    1
    git push origin upstream:upstream

    我需要更改最后一行,这样Git Push就可以在我的Github回购中创建上游分支,这样我就可以从中创建pr。


    我已经做出了承诺,我希望能够将其作为一个请求隔离到当前分支。

    所以我签了一个新的分公司

    1
    git checkout -b isolated-pull

    这就是我的解决方案与@kevin hakanson的不同之处,因为我需要将这个分支重置为历史上我想与之不同的位置

    1
    git reset --hard [sha-to-diff-by]

    Cherry选择要从中创建独立请求的提交

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

    最后把它推到遥控器上

    1
    git push origin isolated-pull

    并请求达西。


    创建新(临时)分支、cherry pick和为该分支创建拉请求的解决方案不满足我的要求。我不想更改存储库以使一组提交可用,因此我提出了以下替代方案:

    首先为所有感兴趣的提交创建修补程序文件:

    1
    git format-patch -1 <sha>

    如果利息承诺恰好是最后一个,您可以使用HEAD代替

    现在,您可以将补丁发送给源存储库的维护人员,他们可以应用补丁:

    1
    2
    3
    4
    5
    6
    7
    8
    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存储库中没有其他分支。