母版中的还原提交,如何将母版拉下而没有还原效果?

时间:2018-06-26 15:11:37

标签: git github

几个星期前,我向主推了一些东西,最终需要还原。

现在,我已经进行了更改,并准备将其重新掌握。我正常的工作流程是签出master,从原点获取最新版本,签出特征分支,合并来自master的新更改,然后对PR创建master。

当我尝试合并来自master的更改时,还原提交将删除我的功能分支中需要保留的许多内容。

处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

那么您要说的是原始主机上的已还原,但是您需要重新添加还原的更改?喜欢

                     [branch feature/A-Fixed]
                   o commit A-fixed
[branch master]    |
commit revert A *  |
                | /
                |/
       commit A o
                |
                .

在这种情况下,将master合并到功能分支中意味着在上图中标记为*的还原提交将添加到您的更改中,因此这就是从分支中删除内容的原因。

因此,您可以做的是从还原提交开始创建一个新分支,然后再次还原还原(un-revert <),将该分支合并到功能分支,然后将master合并到您的分支。

git checkout <reverted> -b revert-branch
git revert <reverted>
git checkout feature/fixed-A
git merge revert-branch # rebase would also work
git branch -D revert-branch
git merge master
#...  continue with your normal workflow

这样,在合并master时,还原已经在您的功能分支中,但是被取消还原的提交取消了,因此还原将不会添加到您的更改中。

                        [branch feature/A-Fixed]
                      o merge revert-branch
                     /|
                    / | [previous state of branch feature/A-Fixed]
                   |  o commit A-fixed
                   |  |
                   o commit revert revert A
[branch master]    |  |
    new commit  *  |  |
                | /  /
                |/  /
commit revert A o  /
                | /
                |/
       commit A o
                |
                .

您可以看到现在还原提交已经在您的功能分支上,因此合并的master可能会添加上面标记有*的其他一些提交,但不添加还原。

通常情况下,在master上已还原某些内容,并且您想要对其进行处理并再次推送它,则应从revert commit开始并先取消还原(git revert revert-commit)。