因此,我意外地对分支“A”进行了5次提交,但我打算将其提交给分支“B”。我也将所有提交提交到了远程/原点。我意识到我已经对错误的分支进行了所有提交。有什么办法可以将所有这5个提交转移到分支“B”并使我的分支“A”像5个提交之前一样?
最佳答案
checkout 到A
。依次复制并粘贴5个提交哈希值。
例如5(最旧)-> 4-> 3-> 2-> 1(最新),假设1是git log
命令的最高提交。
$ git checkout A
$ git log
# copy the 5 commit hashes
checkout 到
B
并采取(cherry-pick)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>
现在,从
hard reset
撤消(A
)最新的5次提交。请注意,硬重置会更改您A的git历史记录(如果已经有其他人在本地 pull 过A分支,则可以使用revert
而不是hard reset
)。因此,需要 force push来推送分支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
注意:樱桃选择一系列提交的基本形式是:
$ git cherry-pick abc1234..def5678
abc1234
是最旧的提交,而def5678
是最新的提交。提交中不包含abc1234
,但包含def5678
。如果要包括abc1234
,则通过将abc1234
放在^
之后来从abc1234
的上一次提交开始范围,例如:$ git cherry-pick abc1234^..def5678
关于git - 对错误的分支进行了5次提交,并将其推送到远程/原点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45874414/