我从我主人那里得到了两个分支:
v2.1:(版本2)我已经做了几个月了 wss:我昨天创建了一个特定的功能添加到我的master(在生产中)
有没有办法将昨天的提交从wss复制到v2.1?
我从我主人那里得到了两个分支:
v2.1:(版本2)我已经做了几个月了 wss:我昨天创建了一个特定的功能添加到我的master(在生产中)
有没有办法将昨天的提交从wss复制到v2.1?
当前回答
您可以从想要复制的提交中创建一个补丁,并将该补丁应用到目标分支。
其他回答
对于从分支wss复制最后一次提交到v2.1的简单情况,你可以简单地获取提交id (git log——oneline | head -n 1),然后执行:
git checkout v2.1
git merge <commit>
使用内置的git gui来选择特定的提交会更安全:
例如:将一个提交从dev分支复制到main分支:
git checkout main
gitk --all
然后右键单击所需的提交,并选择“樱桃选择此提交”
gitk for Mac:在Mac上安装gitk
cherry-pick命令可以从标准输入读取提交列表。
下面的命令选择用户John在“开发”分支中但不在“发布”分支中的提交,并按时间顺序执行。
git log develop --not release --format=%H --reverse --author John | git cherry-pick --stdin
您可以从想要复制的提交中创建一个补丁,并将该补丁应用到目标分支。
你真的应该有一个工作流,让你通过合并来完成这一切:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
所以你所要做的就是git checkout v2.1和git merge wss。如果出于某种原因你真的不能这样做,你不能使用git rebase将你的wss分支移动到正确的位置,从某个地方获取一个提交并应用到其他地方的命令是git的精选。只需签出你想要应用它的分支,并运行git cherry-pick <SHA commit to cherry-pick>。
一些方法可能会拯救你:
如果你的历史是这样的:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (v2-only) - x - x - x (wss)
你可以使用git rebase—to v2 v2-only wss直接移动到v2:
- x - x - x (v2) - x - x - x (v2.1)
|\
| x - x - x (v2-only)
\
x - x - x (wss)
然后你就可以合并了!如果你真的,真的,真的不能达到你可以合并的地步,你仍然可以使用rebase来有效地一次做几个樱桃:
# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase
注意:之所以需要一些额外的工作,是因为它在存储库中创建了重复的提交。这并不是一件好事——简单的分支和合并的重点是能够通过在一个地方提交并将它们合并到任何需要的地方来完成所有事情。重复提交意味着永远不会合并这两个分支(如果稍后决定合并,就会发生冲突)。