我在github上分叉了一个项目,并成功地对我的本地主人进行了更改,并在github上推送到了原点 . 我想发送一个pull请求,但只想包含最后一次提交 . github.com上的pull请求UI显示了最后9次提交,我不知道如何过滤掉它 .
我试图了解我是否应该创建一个新的本地分支,检查出来并以某种方式重置或重新绑定到上游?然后将我的主要ID的最后一次提交应用到新的本地分支并将其用于拉取请求?
我正在努力使这些概念正确,并找出正确的命令行来做我需要的 .
您需要基本上创建一个新分支&cherry-pick要添加到其中的提交 .
注意:在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>
之后,您将在github上看到 <new-branch-name> branch,切换到它并可以提交您想要的更改的pull请求 .
从最新提交开始创建一个新分支,该提交也位于原始存储库中:
git branch new-branch origin/master git checkout new-branch
然后使用 git cherry-pick 获取您想要拉取请求的单个提交 . 如果具有此提交的分支被称为 feature 并且您想要的提交是此分支中的最新提交,那么这将是
git cherry-pick
feature
git cherry-pick feature
假设此补丁适用而没有冲突,您现在可以获得一个分支,您可以执行拉取请求 .
在第二步中,您现在需要决定如何处理 feature 分支 . 如果您尚未在此分支上发布更改,则最佳过程可能是在新分支上重新分配此分支(并删除最后一次提交,如果这不是由 git rebase 自动完成) .
git rebase
我最终遇到了一个叉子,想要将拉取请求提交回原始项目 .
我有:
orignal_project
forked_project(从SHA的原始项目创建:9685770)
my_fork(从SHA的分叉项目创建:207e29b)
我的fork(SHA:b67627b)中的提交,我想提交回原始项目
为此,我:
从原始项目分叉的SHA创建了一个新分支
从原始项目中拉出了所有内容
cherry选择了我想提交的提交作为拉取请求
把它全部推到了github
git命令类似于:
git branch my-feature-request 9685770
git checkout my-feature-request
git pull https://github.com/original_project/original_project.git
git cherry-pick b67627b
git push origin my-feature-request
然后我选择了my-feature-request作为我对原始项目的pull请求的分支 .
这几乎对我有用:
git checkout -b upstream upstream/master git cherry-pick <SHA hash of commit> git push origin upstream
唯一的区别是:
git push origin upstream:upstream
我需要更改最后一行,以便git push在我的GitHub仓库中创建上游分支,以便我可以从中进行PR .
我已经完成了提交,我希望能够将其作为拉取请求隔离回当前分支 .
所以我检查了一个新分支
git checkout -b isolated-pull
And here's where my solution differs from @Kevin Hakanson's ,因为我需要将此分支重置为我想要区分的历史记录中的位置
git reset --hard [sha-to-diff-by]
并且选择我要创建隔离拉取请求的提交
git cherry-pick [my-isolated-commit-sha]
最后把它推到遥控器上
git push origin isolated-pull
并拉请求dat shi .
创建一个新的(临时)分支,樱桃挑选和创建该分支的拉取请求的解决方案并不能让我满意 . 我不想更改我的存储库以使一组提交可用,所以我想出了以下替代方案:
首先为所有感兴趣的提交创建补丁文件:
git format-patch -1 <sha>
如果感兴趣的提交恰好是最后一个,您可以使用 HEAD 而不是 <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中的那个额外分支 .
6 回答
您需要基本上创建一个新分支&cherry-pick要添加到其中的提交 .
之后,您将在github上看到 <new-branch-name> branch,切换到它并可以提交您想要的更改的pull请求 .
从最新提交开始创建一个新分支,该提交也位于原始存储库中:
然后使用
git cherry-pick
获取您想要拉取请求的单个提交 . 如果具有此提交的分支被称为feature
并且您想要的提交是此分支中的最新提交,那么这将是假设此补丁适用而没有冲突,您现在可以获得一个分支,您可以执行拉取请求 .
在第二步中,您现在需要决定如何处理
feature
分支 . 如果您尚未在此分支上发布更改,则最佳过程可能是在新分支上重新分配此分支(并删除最后一次提交,如果这不是由git rebase
自动完成) .我最终遇到了一个叉子,想要将拉取请求提交回原始项目 .
我有:
orignal_project
forked_project(从SHA的原始项目创建:9685770)
my_fork(从SHA的分叉项目创建:207e29b)
我的fork(SHA:b67627b)中的提交,我想提交回原始项目
为此,我:
从原始项目分叉的SHA创建了一个新分支
从原始项目中拉出了所有内容
cherry选择了我想提交的提交作为拉取请求
把它全部推到了github
git命令类似于:
git branch my-feature-request 9685770
git checkout my-feature-request
git pull https://github.com/original_project/original_project.git
git cherry-pick b67627b
git push origin my-feature-request
然后我选择了my-feature-request作为我对原始项目的pull请求的分支 .
这几乎对我有用:
唯一的区别是:
我需要更改最后一行,以便git push在我的GitHub仓库中创建上游分支,以便我可以从中进行PR .
我已经完成了提交,我希望能够将其作为拉取请求隔离回当前分支 .
所以我检查了一个新分支
And here's where my solution differs from @Kevin Hakanson's ,因为我需要将此分支重置为我想要区分的历史记录中的位置
并且选择我要创建隔离拉取请求的提交
最后把它推到遥控器上
并拉请求dat shi .
创建一个新的(临时)分支,樱桃挑选和创建该分支的拉取请求的解决方案并不能让我满意 . 我不想更改我的存储库以使一组提交可用,所以我想出了以下替代方案:
首先为所有感兴趣的提交创建补丁文件:
如果感兴趣的提交恰好是最后一个,您可以使用
HEAD
而不是<sha>
.现在,您可以将补丁发送给源存储库的维护者,他们可以应用它们:
最后,这应该看起来像是一个临时分支被拉取请求合并,但没有fork-repository中的那个额外分支 .