aho*_*b7x 5 git git-merge git-revert
我的提交树描述如下:
--(+A)--(+B)-+-(-B)--(+E)--(master: AE)
\
+--(+C)--(+D)--(branch: ABCD)
Run Code Online (Sandbox Code Playgroud)
一些更改已在master中恢复。我们需要将分支中的更改合并到主分支,以恢复已恢复的提交。
是否存在一步法?或者只有一种方法是在合并分支之前掌握樱桃选择(B)?
PS Final master必须如下所示:(ABCDE) - 顺序并不重要
我会这样做:
git checkout branch
git merge $minusB^ # only if -B is not right after the fork point
git merge -s ours $minusB
git merge master
Run Code Online (Sandbox Code Playgroud)
也就是说,合并 B 反转之前的所有内容,然后合并 B 的反转,但忽略它引入的更改,最后合并 master 的其余部分。
如果您绝对必须以 ABCDE 作为提交的顺序,那么您将需要cherry-pickC 和 D。这最终将是 (A) - (+B) - (-B) - (E) - (C) - (D )。然后你可以git rebase,你可以删除(-B)并将C和D重新排序到E之前。
如果您这样做,那么您就不想合并您的分支。 git cherry-pick创建具有相同更改的新提交。所以当你合并它时可能会导致一些问题。
http://git-scm.com/book/en/Git-Branching-Rebasing#The-Perils-of-Rebasing
如果您正在处理远程分支,并且所有这些提交都会被推送。你不应该这样做。您正在远程更改历史记录,这可能会导致其他人获取更改时出现问题。只需merge分支到 master,正确解决任何冲突,您最终就会得到处于您正在寻找的状态的代码。拥有良好的线性 git 历史记录固然很好,但并不总是有必要。在日志中进行恢复提交并不是一件坏事。