【问题标题】:Undo reverting changes in one branch撤消还原一个分支中的更改
【发布时间】:2021-03-04 19:13:59
【问题描述】:

我从master 创建了一个分支branch1

branch1 中创建了一个文件test1.txt

test1.txt

some logic

然后我将branch1 合并到master。 但我意识到branch1 中实现的逻辑没有经过适当的测试。所以我把test1.txt里面的逻辑去掉了,直接提交到master里面。

现在master中的文件会是这样的:

test1.txt

removed logic

然后我切换到branch1 并测试了逻辑。由于逻辑看起来不错,因此我没有对文件进行任何更改。

当我尝试将这些更改合并到 master 时,它显示以下消息:

Already up to date.

如何将这些更改合并到主文件?

【问题讨论】:

    标签: git git-branch git-revert


    【解决方案1】:

    有几种方法可以做到这一点。

    其中之一是:在您的 master 分支上,还原您删除逻辑的提交

    git revert <sha1>
    

    这将创建一个新的提交,重新启用上述逻辑。


    或者您可以简单地手动编辑文件,以重新启用逻辑(您可以从branch1 的版本中复制/粘贴相关块),然后在master 上提交。

    【讨论】:

      【解决方案2】:

      问题是 branch1 已经合并到 master 中,并且从那时起您没有对 branch1 进行任何更改。

      有不止一种方法可以继续。


      一种方法是简单地检查branch1 并进行一些 更改,即使它只是添加一个换行符,然后添加并提交。现在您可以签出master 并再次将branch1 合并到其中。

      但是,我认为当您这样做时,您的文件 test1.txt 会出现合并冲突。既然知道branch1这个版本是对的,可以说

      git checkout --theirs test1.txt
      git add .
      git commit -m'merged branch1 again'
      

      这完成了合并,用来自branch1的传入版本覆盖master中的test1.txt


      但是,我实际上不会这样做。当我发现原始合并的问题时,我会做一些完全不同的事情。我会撤消原来的合并。不要直接更改master 中的test1.txt;相反,只需将时钟拨回到您最初进行合并之前。

      为此,请访问master,并使用git log 找出合并之前 的提交的 SHA。然后说

      git reset --hard <SHA>
      

      噗,合并消失了; Git 不记得曾经有过合并。现在再次检查branch1 并测试逻辑,如果/当它很好时,切换到master 并执行合并——你现在可以这样做,因为就Git 而言branch1 从未合并到master担心。

      (我最喜欢这种方法,因为历史所讲述的故事是准确的。)

      【讨论】:

        猜你喜欢
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-07
        • 2011-05-04
        • 1970-01-01
        • 2018-06-29
        相关资源
        最近更新 更多