git - master 中的还原提交,如何在没有还原效果的情况下 pull 下 master?

标签 git github

几周前,我将一些东西推到了 master 上,但最终需要恢复。

现在我已经进行了更改,并准备好将它们重新推向 master。我的正常工作流程是 check out master,从 origin pull 出最新版本, check out 功能分支, merge 来自 master 的新更改,然后向 master 提交 PR。

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

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

最佳答案

那么您的意思是原点主控已恢复,但您需要将恢复的更改添加回去?喜欢

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

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

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

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

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

                        [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
                |
                .

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

一般情况下,master 上的某些东西已经被还原,而你想处理它并再次推送它,你应该从还原提交开始,然后先取消还原 (git revert revert-commit)。

关于git - master 中的还原提交,如何在没有还原效果的情况下 pull 下 master?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046214/

相关文章:

c# - (新格式)visual studio 项目中的可选 appsettings.local.json

java - 如何列出 Git 存储库的所有文件夹(项目)

docker - Docker GitHub自动化构建参数

git - 为 github 项目做贡献时代码缩进

php - 阻止 Composer 更新重新安装

python - 如何在 mac Mountain Lion 上将 repo 克隆到 virtualenv

eclipse - 假设未更改的文件未出现在 EGit 暂存 View 中

git - 从两个不同的代码库生成 Git 存储库

git - 使用我的 GitHub 帐户错误 : could not lock config file 设置 git 时遇到问题

python - 如何将任何 Python lint 与 GitHub 提交状态 API 集成?