因此,我意外地对分支“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/

10-14 13:19
查看更多