3

我的回购偶然发现了这个问题:

我的分支树具有以下结构:

(branch)         a - b - c - d - e - f - g
               /           /
(master)  1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 ...

在这里,当我创建分支时,我在提交 1 处从 master 分支,然后在提交 5 处将 master 合并到分支中。

问题是:在合并时,我丢弃了一些更改,我想恢复它们,这样我就可以再次将 master 合并到我的分支中,就好像提交 5 的合并从未发生过一样。

换句话说,我如何撤消合并对提交 5(或提交 d)的影响,而不会丢失我在后续提交中的更改?(即 e - f - g)

我的目标是能够将 master 合并回分支,但现在我会更加小心我的合并。

谢谢。

4

1 回答 1

3
(branch)         a - b - c - d - e - f - g
               /           /
(master)  1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 ...

git rebase --onto c d g
git checkout -b newbranch

(newbranch)                e' - f' - g'
                          /
(branch)         a - b - c - d - e - f - g
               /           /
(master)  1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 ...

如果您对结果满意,则丢弃旧分支并重命名新分支:

git branch -D branch
git branch -m newbranch branch

最后推送新分支。

git push -n origin branch # check what you're about to push
git push -f origin branch # -f is required to rewrite history; be careful
于 2013-06-14T04:07:41.377 回答