我看到类似的问题已被多次提出,但我仍然不明白,我需要一个实际的例子来说明我的情况。
我有一个有两个分支的github仓库:
master
这是我的开发分支,我想推送所有最新的更改和新功能stable
我只想在修改新功能之前推送错误修复。现在我做了4次提交并将它们推送到master
。前三个提交是新功能,最后提交是一个错误修复。
在github中,如果我选择stable
分支,则表明它在master之后是4次提交(这是正确的)。
现在我想将最后一次提交推送到稳定分支。我如何实现这一目标?
答案 0 :(得分:4)
您可以在last-commit-hash
分支中挑选stable
并推送到远程。
$ git fetch
$ git log # copy the last-commit-hash
$ git checkout -b stable origin/stable # create local/stable branch from remote/stable
$ git cherry-pick <last-commit-hash> # take the last-commit
$ git push origin HEAD # update remote/stable
答案 1 :(得分:1)
<强>解决方案:强>
您可以使用git cherry-pick将单个提交单独应用于当前分支。
git checkout stable
git cherry-pick <last_commit_id>
背景:
git cherry-pick会将现有提交中所做的更改应用于另一个分支,同时记录新提交。从本质上讲,您可以将提交从分支复制到分支。
给出以下树
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
76cada - 62ecb3 - b886a0 [feature]
假设我们想将b886a0复制到master(在5a6057之上)。
我们可以运行
git checkout master
git cherry-pick b886a0
Now our tree will look something like:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 - a66b23 [master]
\
76cada - 62ecb3 - b886a0 [feature]
答案 2 :(得分:0)
你想有选择地从另一个分支中提交提交,所以这听起来就像樱桃选择应该做的那样。只需结帐稳定并执行git cherry-pick <commit hash>
至于为什么,您可能想要阅读git工作流程,特别是名为gitflow的工作流程。在我看来,你需要一个类似分支的功能,你可以在其中修复错误,并且它可以合并回到稳定的&#34;主线。在这里你只是做一个gitmerge,而当你在同一个分支中混合功能开发和错误修复时,你会遇到这样的情况,你必须在这种情况下,并且要小心地忽略对新功能的提交以获得你想要的bug修复提交。