如何将分支重置为我在分离-HEAD模式下创建的提交?

时间:2015-01-11 19:30:06

标签: git git-reset git-detached-head

我不知道Git图在这个例子中是什么样的,所以在我意外丢失任何代码之前,我想我会寻求帮助。

我提交了一些破坏内容的代码,所以我查看了之前的提交,看看出了什么问题。

commit 87dfs7f6d6fs8 (latest commit on master) 
commit 7fe7f86we6f8d6 <-- checked out this guy

但是,我忘了重新检查master来解决问题,而是将其修复为分离-HEAD状态。

所以,现在,我的Git历史看起来像这样......(我猜)

commit 87dfs7f6d6fs8 (latest commit on master) 

  |--- commit 6f5dsf5d65f <-- New commit (currently checked out)
commit 7fe7f86we6f8d6 <-- checked out this guy

我想做的是彻底摆脱最高限度的提交并保留我所做的更改。我想这样做我需要reset --hard我正在使用的提交哈希,对吧?

所以,它是:

git reset --hard 6f5dsf5d65f

其中commit 6f5dsf5d65f是我在分离-HEAD状态下所做的提交。这是正确的吗..?

1 个答案:

答案 0 :(得分:3)

  

我想做的就是完全摆脱最顶层的提交[87dfs7f6d6fs8]并保留我所做的更改。

如果我理解你的问题,你基本上需要

  1. 存储未提交的更改(如果有),
  2. 使master分支点提交6f5dsf5d65f而不是87dfs7f6d6fs8
  3. 弹出藏匿处(如有必要)。

  4. 通过运行git status检查是否需要创建存储。如果它告诉您具有干净的工作状态,请运行

    git checkout master            # important!
    git reset --hard 6f5dsf5d65f
    

    否则,请运行

    git stash save 
    git checkout master            # important!
    git reset --hard 6f5dsf5d65f
    git stash pop
    

    请注意,在任何一种情况下,您都需要先检查master,然后才能重置它;处于分离-HEAD状态时运行git reset只会移动HEAD