我有一个特定的提交,我想贡献给我在github上分叉的存储库。 我认为这样做的机制是“拉取请求”。 但是,当我尝试这个时,我只能请求我的整个分支。 我不希望提出其他提交请求,因为它们不相关。 知道如何做到这一点。
最后一次提交b50b2e7是我希望提取请求的唯一提交。 无论如何,我可以做到这一点,或者所有提交都是相互依赖的?
答案 0 :(得分:53)
仅使用该更改创建一个新分支:
$ git fetch --all
$ git checkout -b my-single-change upstream/master
$ git cherry-pick b50b2e7
$ git push -u origin my-single-change
然后从该分支创建PR。
以上假设您已将upstream
设置为遥控器。如果没有,请先执行此操作:
$ git remote add upstream https://github.com/konradjk/exac_browser.git
答案 1 :(得分:0)
我遇到了与alwaysCurious相同的错误,因此我做了一些挖掘工作。 1
A - B - C [master]
\
D - E - F - G [feature]
您正在处理一个项目,您使用一个单独的分支(feature
)来进行已提交的更改(D-E-F-G
),并且想要创建一个请求请求。但是,您只希望在提交请求中包含某些提交(E
和F
)
这里的过程是Joseph's answer
中的过程# optional: set upstream as remote if it's not
git remote add upstream https://github.com/<upstream_github_username>/<upstream_github_repo_name>.git
# fetch changes
git fetch --all
# create specific branch for your partial pull request
git checkout -b partial-change upstream/master
现在这是它的样子:
[partial-change]
A - B - C [master]
\
D - E - F - G [feature]
用樱桃选择您的特定提交并推送更改:
git cherry-pick <hash of commit E>
git cherry-pick <hash of commit F>
git push -u origin partial-change
解决所有冲突后,您将获得以下信息:
E1 - F1 [partial-change]
/
A - B - C [master]
\
D - E - F - G [feature]
如果相反,您只想将所有连续的提交应用到最后一个(或两个或三个),则可以从特定的提交分支出来。例如,在这里我只希望提交到E
的提交,而不是随后的提交:
git checkout -b partial-consecutive-changes <hash of commit E>
git push -u origin partial-consecutive-changes
A - B - C [master]
\
D - E [partial-consecutive-changes]
\
F - G [feature]
如果您只是对母版应用了连续的更改而没有使用特定的分支,那么最后一个过程也可以为您提供帮助,现在您想在之后进行挑选。如果您已经在C
分叉了一个项目并继续进行其他提交,则这是很重要的。在这里,我添加一个星号来表示叉上正在发生新的更改:
A - B - C - D* - E* - F* - G* [master]
您不应该做的是:
git checkout -b partial-change upstream/master
git cherry-pick <hash of commit D>
git cherry-pick <hash of commit E>
git push -u origin partial-change
在这种情况下,您尝试在G*
分支出主服务器,而樱桃选择先前的提交将给您警告:
由于冲突解决,以前的选择已变为空。
因为要在新分支上添加相同的旧提交。
您应该做的是:
git checkout -b partial-change <hash of commit E>
git push -u origin partial-change
A - B - C - D* - E* - F* - G* [master]
\
D* - E* [partial-change]
此后,您就可以仅使用选定的提交进行拉取请求。
注意:
在这里,我要从Schwern扩展此great answer。
要获取最后的n
次提交哈希,可以使用以下方法:git log --pretty=oneline --abbrev-commit | head -n
答案 2 :(得分:-1)
我不熟悉樱桃采摘,在尝试约瑟夫的方法时遇到了问题(关于樱桃采摘是空的)。我发现一种变通的方法似乎效果很好:
# Create new branch directly from specified commit:
$ git checkout -b my-single-change b50b2e7
$ git push --set-upstream origin my-single-change
您现在可以在GitHub中选择此分支并创建拉取请求。