我正在阅读rebase文档。 Rebase“转发端口本地提交到更新的上游头”。好的,......可以copy
本地提交更新上游吗?
这是起点:
o---o---o---o---o master
\
o---o---o---o---o next
\
o---o---o topic
这是我用rebase获得的东西:
o---o---o---o---o master
| \
| o'--o'--o' topic
\
o---o---o---o---o next
这就是我想要的:
o---o---o---o---o master
| \
| o'--o'--o' new topic
\
o---o---o---o---o next
\
o---o---o topic
没有理由:我只是在问是否可能。
答案 0 :(得分:3)
git checkout -b topic2 master
o---o---o---o---o master / topic2
\
o---o---o---o---o next
\
o---o---o topic
git rebase --onto topic2 next topic
将所有提交从next
(不包括)转到主题(包括)到topic2
o---o---o---o---o master
| \
| o'--o'--o' topic2
\
o---o---o---o---o next
\
o---o---o topic
PS:如果您已经重新定位了topic
分支
o---o---o---o---o master
| \
| o'--o'--o' topic
\
o---o---o---o---o next
旧的'承诺没有消失。查看git reflog
,然后您可以重新创建“旧版”'分支。
git checkout -b old_topic <TOPIC_COMMIT_ID_BEFORE_REBASE>
答案 1 :(得分:2)
只需创建一个新分支并重新绑定该分支。
git checkout topic
git checkout -b new_topic
git rebase next new_topic --onto master
答案 2 :(得分:1)
除了rebase
这是一个更复杂的工具之外,还有一个cherry-pick
命令直接执行提交的副本。
首先在master上创建一个新分支并结帐。现在请注意/阅读/查看要复制的所有提交的哈希:
o---o---o---o---o master / new-topic
|
|
\
o---o---o---o---o next
\
C---B---A topic
: : :
: : ^ commit hash AAAAA
: ^ commit hash BBBBB
^ commit hash CCCCC
坐在new-topic
分行,发出:
git cherry-pick CCCCC
o---o---o---o---o master
| \
| c' new-topic
\
o---o---o---o---o next
\
C---B---A topic
git cherry-pick BBBBB
git cherry-pick AAAAA
o---o---o---o---o master
| \
| c'---b'---a' new-topic
\
o---o---o---o---o next
\
C---B---A topic
您可以切换订单,使用--no-commit
并在此期间修补它们等 - 就像在rebase --interactive
期间一样,但是一步一步地手动操作。实际上,您可能会认为rebase
类似于大规模自动化cherry-pick
。