COPY 本地提交到另一个分支
COPY local commits to another branch
我正在阅读 rebase 文档。变基 "Forward-port local commits to the updated upstream head"。好的,...可以 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
没有原因:我只是想问一下是否可以。
只需创建一个新分支并重新设置该分支即可。
git checkout topic
git checkout -b new_topic
git rebase next new_topic --onto master
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
'old' 提交没有消失。检查 git reflog
并且您可以重新创建 'old' 分支。
git checkout -b old_topic <TOPIC_COMMIT_ID_BEFORE_REBASE>
除了 rebase
这是一个比方说更复杂的工具,还有一个 cherry-pick
命令可以直接执行提交的副本。
首先在 master 上创建一个新分支并检出它。现在 note/read/view 您要复制的所有提交的 哈希值 :
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
。
我正在阅读 rebase 文档。变基 "Forward-port local commits to the updated upstream head"。好的,...可以 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
没有原因:我只是想问一下是否可以。
只需创建一个新分支并重新设置该分支即可。
git checkout topic
git checkout -b new_topic
git rebase next new_topic --onto master
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
'old' 提交没有消失。检查 git reflog
并且您可以重新创建 'old' 分支。
git checkout -b old_topic <TOPIC_COMMIT_ID_BEFORE_REBASE>
除了 rebase
这是一个比方说更复杂的工具,还有一个 cherry-pick
命令可以直接执行提交的副本。
首先在 master 上创建一个新分支并检出它。现在 note/read/view 您要复制的所有提交的 哈希值 :
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
。