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

我试图理解我是否应该创建一个新的本地分支,检查出来,以某种方式重置或重基到上游?然后应用我的最后一次提交从我的主人通过id到新的本地分支,并使用它的拉请求?

我正在努力掌握正确的概念,并找出正确的命令行来完成我需要的工作。


当前回答

我最终遇到了这样的情况:我已经分叉了,想要向原始项目提交一个拉请求。

我有:

orignal_project forked_project(从SHA的原始项目创建:9685770) my_fork(从SHA的fork项目创建:207e29b) 在我的fork (SHA: b67627b)中提交一个我想提交回原始项目的提交

为此,我:

从原来项目分叉的SHA创建了一个新的分支 都是从原项目中提取的 cherry选择了我想作为拉请求提交的提交 都放到github上了

git命令是这样的:

Git分支my-feature-request 9685770 Git checkout my-feature-request Git拉https://github.com/original_project/original_project.git Git选择b67627b Git推送源my-feature-request

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

其他回答

从最近的提交开始创建一个新分支,它也在原始存储库中:

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

然后使用git来获得你想要的pull请求的单个提交。如果带有此提交的分支称为feature,并且您想要的提交是该分支中的最新提交,则将为

git cherry-pick feature

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

在第二步中,您现在需要决定如何处理您的特性分支。如果你还没有在这个分支上发布你的更改,最好的方法可能是在new-branch上重新基于这个分支(并且删除最后一次提交,如果git rebase没有自动完成的话)。

你需要创建一个新的分支,并选择你想要添加到它的提交。

注意:在执行checkout/cherry-pick命令之前可能需要这些命令 Git远程添加上游< Git仓库> Git远程更新

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,切换到它,可以提交拉请求和你想要的更改。

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

所以我去了一家新分店

git checkout -b isolated-pull

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

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

然后选择我想从中创建一个独立的拉请求的提交

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

最后把它推上遥控器

git push origin isolated-pull

并拉请求dat shi。

我最终遇到了这样的情况:我已经分叉了,想要向原始项目提交一个拉请求。

我有:

orignal_project forked_project(从SHA的原始项目创建:9685770) my_fork(从SHA的fork项目创建:207e29b) 在我的fork (SHA: b67627b)中提交一个我想提交回原始项目的提交

为此,我:

从原来项目分叉的SHA创建了一个新的分支 都是从原项目中提取的 cherry选择了我想作为拉请求提交的提交 都放到github上了

git命令是这样的:

Git分支my-feature-request 9685770 Git checkout my-feature-request Git拉https://github.com/original_project/original_project.git Git选择b67627b Git推送源my-feature-request

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

创建一个新的(临时)分支的解决方案,并为该分支创建拉请求并不能让我满意。我不想改变我的存储库以使一组提交可用,所以我提出了以下替代方案:

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

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

最后,这看起来就像一个临时分支被一个pull请求合并了一样,但是在fork-repository中没有额外的分支。