Git 撤消恢复一个分支中的更改

Git 撤消恢复一个分支中的更改,git,git-branch,git-revert,Git,Git Branch,Git Revert,我已经从master创建了一个分支branch1 在branch1中创建了一个文件test.txt: test1.txt some logic removed logic 然后我将branch1合并到master。 但是我意识到branch1中实现的逻辑没有得到正确的测试。因此,我删除了test.txt中的逻辑,并直接在master中提交 现在,master中的文件将如下所示: test1.txt some logic removed logic 然后我切换到branch1,并测试了逻辑

我已经从
master
创建了一个分支
branch1

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

test1.txt

some logic
removed logic
然后我将
branch1
合并到master。 但是我意识到
branch1
中实现的逻辑没有得到正确的测试。因此,我删除了
test.txt中的逻辑,并直接在master中提交

现在,master中的文件将如下所示:

test1.txt

some logic
removed logic
然后我切换到
branch1
,并测试了逻辑。由于逻辑看起来不错,我没有对文件做任何更改

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

Already up to date.

如何将这些更改合并到master?

有几种方法

其中之一是:在
master
分支上,恢复删除逻辑的提交

git revert <sha1>
git还原
这将创建一个新的提交,重新启用所述逻辑



或者,您可以简单地手工编辑文件,以重新启用逻辑(您可以从
branch1
中的版本复制/粘贴相关区块),然后在
master上提交
branch1
。问题是
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重置——硬
噗,合并不见了;Git没有任何关于合并的记忆。现在再次签出
branch1
并测试逻辑,如果/当逻辑正常时,切换到
master
并执行合并-现在可以这样做,因为就Git而言
branch1
从未合并到
master

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