我有一个特定的提交,我想贡献给我在github上分叉的存储库.我认为这样做的机制是"拉取请求".但是,当我尝试这个时,我只能请求我的整个分支.我不希望提出其他提交请求,因为它们不相关.知道如何做到这一点.
最后一次提交b50b2e7是我希望提取请求的唯一提交.无论如何,我可以做到这一点,或者所有提交都相互依赖?
Jos*_*ber 60
仅使用该更改创建一个新分支:
$ git fetch --all
$ git checkout -b my-single-change upstream/master
$ git cherry-pick b50b2e7
$ git push -u origin my-single-change
Run Code Online (Sandbox Code Playgroud)
然后从该分支创建PR.
以上假定您已将其设置upstream为远程.如果没有,请先执行此操作:
$ git remote add upstream https://github.com/konradjk/exac_browser.git
Run Code Online (Sandbox Code Playgroud)
gib*_*one 22
我有与alwaysCurious相同的错误,所以我做了一些挖掘。1
A - B - C [master]
\
D - E - F - G [feature]
Run Code Online (Sandbox Code Playgroud)
您正在处理一个项目,您使用单独的分支 ( feature) 进行提交的更改 ( D-E-F-G),并且您想要创建拉取请求。但是,您只希望在拉取请求中包含一些提交(E和F)
这里的程序是约瑟夫的回答
# 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
Run Code Online (Sandbox Code Playgroud)
现在它是这样的:
[partial-change]
A - B - C [master]
\
D - E - F - G [feature]
Run Code Online (Sandbox Code Playgroud)
樱桃挑选您的特定提交并推送更改:
git cherry-pick <hash of commit E>
git cherry-pick <hash of commit F>
git push -u origin partial-change
Run Code Online (Sandbox Code Playgroud)
解决任何冲突后,您将获得:
E1 - F1 [partial-change]
/
A - B - C [master]
\
D - E - F - G [feature]
Run Code Online (Sandbox Code Playgroud)
相反,如果您只想将所有连续提交应用到最后一个(或两个或三个),您可以在特定提交处分支。例如在这里我只想要提交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]
Run Code Online (Sandbox Code Playgroud)
如果您只是对 master 应用连续更改而不使用特定分支,那么最后一个过程也可以帮助您,现在您想在之后挑选它们。如果您已经分叉了一个项目C并在 master 上继续进行其他提交,则这是相关的。在这里,我添加一个星号来表示分叉上正在发生新的变化:
A - B - C - D* - E* - F* - G* [master]
Run Code Online (Sandbox Code Playgroud)
你不应该做的是:
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您尝试将 master 分支出来,G*然后选择之前的提交会给您警告:
之前的cherry-pick 现在是空的,可能是由于冲突的解决。
因为您在新分支上添加了相同的旧提交。
你应该做的是:
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]
Run Code Online (Sandbox Code Playgroud)
在此之后,您准备好仅使用选定的提交发出拉取请求。
笔记:
在这里,我扩展了 Schwern 的这个很棒的答案。
要获取最后一次n提交哈希,使用以下方法可能很有用:git log --pretty=oneline --abbrev-commit | head -n
我不熟悉樱桃,当我尝试约瑟夫的方法时遇到了问题(樱桃是空的)。我找到了一个似乎运行良好的解决方法:
# Create new branch directly from specified commit:
$ git checkout -b my-single-change b50b2e7
$ git push --set-upstream origin my-single-change
Run Code Online (Sandbox Code Playgroud)
您现在可以在 GitHub 中选择此分支并创建拉取请求。