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
(我最喜欢这种方法,因为历史所讲述的故事是准确的。)