所以我不小心做了5次提交分支"A",但我打算把它分成"B".我还将所有提交推送到远程/原点.我意识到我已将所有提交到错误的分支.有没有什么方法可以将所有这5个提交转移到分支"B"并使我的分支"A",因为它是5次提交之前?
结帐到A.按顺序复制并粘贴5个提交哈希值.
例如5(最老) - > 4 - > 3 - > 2 - > 1(最新),假设1是你的最高git log命令提交.
$ git checkout A
$ git log
# copy the 5 commit hashes
Run Code Online (Sandbox Code Playgroud)
结帐B并采取(樱桃挑选)5提交到B分支.
$ git checkout B
$ git cherry-pick <commit-hash>
# repeat 5 times with new commit hash each time (old to new)
# Or, you can cherry-pick a range of commits by 'git cherry-pick <from-commit>^..<to-commit>', note '^' sign
$ git cherry-pick <commit-5>^..<commit-1>
Run Code Online (Sandbox Code Playgroud)
现在,撤消(hard reset)最新的5次提交A.请注意,硬重启会改变你的A的git的历史记录(如果有其他人拉到一个分支已经在本地,那么你可以使用revert代替hard reset).因此,力需要推推分支A.
$ git checkout A
$ git branch A.bac # backup branch 'A' for safety
$ git reset --hard HEAD~5 # undo last 5 commits from branch A
$ git push -f origin HEAD # need force push since history is changed
Run Code Online (Sandbox Code Playgroud)
注意:采摘一系列提交的樱桃的基本形式是:
$ git cherry-pick abc1234..def5678
Run Code Online (Sandbox Code Playgroud)
abc1234是最早的提交,def5678是最新的提交.abc1234不包括在提交中但def5678包括在内.如果您要包括abc1234,然后开始从以前的范围内提交的abc1234通过将一个^经过abc1234这样的:
$ git cherry-pick abc1234^..def5678
Run Code Online (Sandbox Code Playgroud)