【发布时间】:2015-12-25 04:45:25
【问题描述】:
所以我只是在我的 master 分支上测试了一些东西,但我知道我想在开始这些测试功能之前重置/恢复到 master 上的最后一次提交。所以我立即创建了一个新分支(我们称之为testfeatures),我认为在master 分支上使用git reset --hard 不会影响它。新的testfeatures 分支是在与 master 相同的状态下创建的(因此它仍然具有所有这些测试功能),然后我签回 master。在 master 上,我使用了git reset --hard <#lastcommitidhere>。现在,这将我的主分支重置为我想要的方式,但发现它也重置了之前创建的“testfeatures”分支(创建此分支后,我在切换回主分支并重置之前没有提交任何内容)。
所以我的问题是,我将如何撤消任何分支上的重置以恢复这些测试功能?是否可以?另外,为什么重置master对我的另一个分支有影响,因为我认为它们是孤立的?
此外,“测试功能”在重置之前也没有在主分支上提交。
【问题讨论】:
-
它无法重置您的其他分支。它们完全不相关,除非您两次运行相同的命令(每个分支一次)。
git log --graph --oneline --decorate告诉你什么? -
我在主分支上的终端中运行了一次命令,它肯定会重置我的另一个分支。 git log 显示:prntscr.com/9i9zyv。
f413cac提交是我重置的目标。 -
所以现在,master和designredo指向同一个位置。你是说,在此之前,他们指向不同的位置吗?
git reflog向您展示了什么? -
git reflog: prntscr.com/9ia0po 。在重置之前,我拥有未提交的测试功能。我创建了一个新分支(所以它在那个时候与 master 相同,在这个新分支上再次没有提交)。然后我从新分支切换回 master,并重置为我找到的最后一个提交 id。
-
您基本上将 master 重置回它开始的位置。 reflog 显示 master 的更改与 designredo 的更改相同。没有证据表明那里发生了提交。您绝对确定您的测试更改现在不在 master 中吗?这里的证据相当有力,表明它们要么存在,要么测试更改在任何地方都不存在。