Git: 如何变基到过去的特定提交?
Git: How to rebase to a specific commit in past?
我想变基到一个特定的提交,它不是另一个分支的 HEAD,而是向后:
A --- B --- C master
\
\-- D --- E topic
至
A --- B --- C master
\
\-- D --- E topic
如何以优雅和通用的方式实现这一点?
总的来说,我的意思是目标提交 (B) 不一定是 HEAD 的直接祖先(我不妨变基到 A 或以前的提交)并且可能不止两个提交主题分支。我可能还想从 B 变基到 A。
使用 git cherry-pick
git rebase
是一种 git cherry-pick
类固醇。
如果您只有几个提交要移动:您可以使用 git cherry-pick
一个一个地挑选它们
# move back to B
git checkout B
# start a branch here, and use it as the active branch
git checkout -b wip
# cherry-pick the commits you want to have
git cherry-pick D
git cherry-pick E
# if all went well : move the 'topic' branch to the current branch :
git checkout topic
git reset --hard wip
# delete the temporary 'wip' branch
git branch -d wip
使用 git 变基
如评论中所述:git rebase
可以采用额外的选项来仅移动一定范围的提交。
您可以使用 :
执行与上述 cherry-pick
序列相同的操作
git rebase --onto B master topic
额外说明:git rebase -i
git rebase
也有一个 --interactive|-i
标志:
git rebase -i --onto B master topic
使用 -i
标志:在执行任何操作之前,git 将为您打开一个文本编辑器,其中将列出所有重新设置基数的提交。
此步骤的明显好处是可以向您展示将应用的内容(在实际应用之前),并且还可以描述比 "picking that commit" 更多的操作。
您可以在网上搜索 git rebase -i
上更完整的教程,这里是一个:
Git Interactive Rebase, Squash, Amend and Other Ways of Rewriting History (thoughtbot.com)
我想变基到一个特定的提交,它不是另一个分支的 HEAD,而是向后:
A --- B --- C master
\
\-- D --- E topic
至
A --- B --- C master
\
\-- D --- E topic
如何以优雅和通用的方式实现这一点?
总的来说,我的意思是目标提交 (B) 不一定是 HEAD 的直接祖先(我不妨变基到 A 或以前的提交)并且可能不止两个提交主题分支。我可能还想从 B 变基到 A。
使用 git cherry-pick
git rebase
是一种 git cherry-pick
类固醇。
如果您只有几个提交要移动:您可以使用 git cherry-pick
一个一个地挑选它们
# move back to B
git checkout B
# start a branch here, and use it as the active branch
git checkout -b wip
# cherry-pick the commits you want to have
git cherry-pick D
git cherry-pick E
# if all went well : move the 'topic' branch to the current branch :
git checkout topic
git reset --hard wip
# delete the temporary 'wip' branch
git branch -d wip
使用 git 变基
如评论中所述:git rebase
可以采用额外的选项来仅移动一定范围的提交。
您可以使用 :
执行与上述cherry-pick
序列相同的操作
git rebase --onto B master topic
额外说明:git rebase -i
git rebase
也有一个 --interactive|-i
标志:
git rebase -i --onto B master topic
使用 -i
标志:在执行任何操作之前,git 将为您打开一个文本编辑器,其中将列出所有重新设置基数的提交。
此步骤的明显好处是可以向您展示将应用的内容(在实际应用之前),并且还可以描述比 "picking that commit" 更多的操作。
您可以在网上搜索 git rebase -i
上更完整的教程,这里是一个:
Git Interactive Rebase, Squash, Amend and Other Ways of Rewriting History (thoughtbot.com)