我有同样的错误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]
Cherry-pick 您的特定提交并推送更改:
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]
菜鸟失误
如果您只是将连续更改应用到 master 而不为它们使用特定分支,并且现在您想在之后选择它们,最后一个过程也可以帮助您。如果您在 C 分叉了一个项目并继续进行其他提交的 master ,则这是相关的。在这里,我添加一个星号来表示分支上正在发生新的变化:
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* 处分支出 master,并且樱桃选择以前的提交会给您警告:
之前的樱桃选择现在是空的,可能是由于冲突解决。
因为您要在新分支上添加相同的旧提交。
你应该做的是:
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