几周前,我把一些东西推给师父,结果却需要还原。
现在我已经做出了改变,并准备再次推动他们掌握。我的正常工作流程是签出主控形状,从原始位置提取最新版本,签出特征分支,合并主控形状的新更改,然后对主控形状进行PR。
当我尝试合并来自master的更改时,revert commit将删除我的feature分支中需要保留的许多内容。
处理这个问题的最好方法是什么?

最佳答案

所以你的意思是,在原始主机上已经恢复,但你需要添加恢复的更改回到?就像

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

在这种情况下,将master合并到特性分支中意味着上面的图中标记为*的revert commit将添加到您的更改中,所以这就是从分支中删除内容的原因。
因此,您可以做的是从revert commit开始创建一个新分支,然后再次还原(unrevert
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

这样,在合并主控形状时,还原已在功能分支中,但被“撤消还原”提交取消,因此不会将还原添加到更改中。
                        [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
                |
                .

您可以看到,现在revert commit已经在您的feature分支上了,因此合并master可以添加一些上面标记为*的其他commit,但不能添加revert。
一般情况下,在master上还原了某些内容,并且您希望对其进行处理并再次推送它的情况下,应该首先从revert commit和unrevert开始(git revert revert commit)。

09-04 05:47