撤销在一个分支中的还原更改

3

我从master创建了一个分支branch1

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

test1.txt

some logic

然后我将branch1合并到主分支。 但是我意识到在branch1中实现的逻辑没有经过适当的测试。所以我已在主分支中删除了test1.txt中的逻辑,并进行了直接提交。

现在主分支中的文件将会变成这样:

test1.txt

removed logic

然后我切换到branch1并测试了逻辑。由于逻辑看起来没问题,所以我没有更改文件。

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

Already up to date.

我如何将这些更改合并到主分支?
2个回答

3

有多种方法可以实现这个目标。

其中一种方法是:在你的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'

这样就完成了合并,将master中的test1.txt用来自branch1的版本覆盖。


然而,这并不是我实际上会做的。当我发现原始合并中出现问题时,我会完全采取不同的做法。我会撤销原始合并。不要直接在master中更改test1.txt;相反,只需将时钟拨回到你首次进行合并之前的时间。

为此,请进入master,使用git log查找合并前的提交SHA。然后说:

git reset --hard <SHA>

噔噔咚,合并消失了;Git没有记住曾经有过合并。现在再次检出branch1并测试逻辑,如果/当它正常工作时,切换到master并执行合并——现在你可以这样做了,因为就Git而言,branch1从未被合并到master

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接