在GitHub上发送拉取请求仅用于最新提交

Kev*_*son 273 git github pull-request

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

我试图了解我是否应该创建一个新的本地分支,检查出来并以某种方式重置或重新绑定到上游?然后将我的主要ID的最后一次提交应用到新的本地分支并将其用于拉取请求?

我正在努力使这些概念正确,并找出正确的命令行来做我需要的.

Kev*_*son 292

你需要基本上创建一个新的分支并挑选你想要添加的提交.

注意:在checkout/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>
Run Code Online (Sandbox Code Playgroud)

之后,您将<new-branch-name>在github上看到分支,切换到它并可以提交您想要的更改的pull请求.

  • 在运行git checkout -b upstream upstream/master之前,我还需要```git remote add upstream <git repository>```和```git remote update```. (31认同)
  • 为什么我需要一个额外的分支,只为一个改变的代码行创建一个PR?github上有没有人想到这一点? (14认同)
  • 这是有效的,但不是你应该怎么做,因为现在你的上游分支和上游/主要是不同的,如果合并你的拉取请求不是上游的第一件事,它将永远是不同的.因此,您应该更喜欢http://stackoverflow.com/a/5256304/1904815. (6认同)
  • 详细说明:这不是技术问题,而是逻辑问题.如果你想对上游做任何事情(比如从那里合并),你需要添加一个"真实上游"分支或重置你的上游(不再为你的拉动请求留下本地分支进行额外的更改). (2认同)
  • @JonHanna不......为什么你要合并一个分支?你为什么不能合并提交? (2认同)

Lar*_*ski 57

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

git branch new-branch origin/master
git checkout new-branch
Run Code Online (Sandbox Code Playgroud)

然后使用git cherry-pick获取您想要拉取请求的单个提交.如果调用具有此提交的分支feature并且您想要的提交是此分支中的最新提交,则这将是

git cherry-pick feature
Run Code Online (Sandbox Code Playgroud)

假设此补丁适用而没有冲突,您现在可以获得一个分支,您可以执行拉取请求.

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

  • 如果`feature`已经在`origin/master`中提交,那么在`cherry-pick`期间没有任何反应.新的分支应该来自`upstream/master`(即Kevin Hakanson的回答) (5认同)

Joh*_*gle 26

我最终遇到了一个叉子,想要将拉取请求提交回原始项目.

我有:

  • orignal_project
  • forked_project(从SHA的原始项目创建:9685770)
  • my_fork(从SHA的分叉项目创建:207e29b)
  • 我的fork(SHA:b67627b)中的提交,我想提交回原始项目

为此,我:

  1. 从原始项目分叉的SHA创建了一个新分支
  2. 从原始项目中拉出所有
  3. cherry选择了我想提交的提交作为拉取请求
  4. 把它全部推到了github

git命令类似于:

  1. git branch my-feature-request 9685770
  2. git checkout my-feature-request
  3. git pull https://github.com/original_project/original_project.git
  4. git cherry-pick b67627b
  5. git push origin my-feature-request

然后我选择了my-feature-request作为我对原始项目的pull请求的分支.


小智 6

这几乎对我有用:

git checkout -b upstream upstream/master

git cherry-pick <SHA hash of commit>

git push origin upstream
Run Code Online (Sandbox Code Playgroud)

唯一的区别是:

git push origin upstream:upstream
Run Code Online (Sandbox Code Playgroud)

我需要更改最后一行,以便git push在我的GitHub仓库中创建上游分支,以便我可以从中进行PR.


irb*_*ana 5

我已经完成了提交,我希望能够将其作为拉取请求隔离回当前分支.

所以我检查了一个新分支

git checkout -b isolated-pull
Run Code Online (Sandbox Code Playgroud)

这里是我的解决方案与@Kevin Hakanson的不同之处,因为我需要将这个分支重置到我想要分享的历史中的位置

git reset --hard [sha-to-diff-by]
Run Code Online (Sandbox Code Playgroud)

并且选择我要创建隔离拉取请求的提交

git cherry-pick [my-isolated-commit-sha]
Run Code Online (Sandbox Code Playgroud)

最后把它推到遥控器上

git push origin isolated-pull
Run Code Online (Sandbox Code Playgroud)

并拉请求dat shi.