git“重置”workdir到HEAD而不触及临时区域

时间:2016-09-09 07:20:41

标签: git

使用与git-reset手册页中相同的表格表示,我在git存储库中有这些状态:

working index HEAD
------------------
 B       B     A

什么命令会改变状态?

working index HEAD
------------------
 A       B     A

换句话说,我想将工作目录状态“重置”到HEAD状态,但不要触及暂存区状态。

4 个答案:

答案 0 :(得分:2)

我认为这应该有效(订购事宜)。

首先需要提交索引中的内容(使HEAD看起来像这个索引和工作目录:B - 使用您的注释):

git commit

因此,HEAD将是B(使用您的注释)。

现在,打印reflog,因为我们需要B的哈希:

git reflog

现在,使用不同的选项运行几个reset命令:

git reset --hard HEAD~ # makes the working directory, the index, and the HEAD looks like this: A, A, A (respectively)
git reset --mixed <hashOfB> # makes the working directory, the index, and the HEAD looks like this: A, B, B (respectively)
git reset --soft HEAD~ # makes the working directory, the index, and the HEAD looks like this: A, B, A (respectively)

我希望这会有所帮助。

答案 1 :(得分:1)

正如在this thread中讨论的那样,我最初想的是关于git checkout但是:

  

FWIW,我对该指数的理解是它是移动的中间人   从工作树到对象存储的东西以及用于移动东西的东西   对象存储到工作树。
  因此,当您签出blob时,它首先会从对象存储区复制到索引,然后从索引复制到工作树。

所以(同一个线程)

  

如果您想绕过索引,可以使用cat-fileshow执行此操作;它只是在构建下一个的正常工作流程中不是一个有用的操作   提交当前的那个,这就是为什么存在的唯一原因   没有选项,例如“checkout --no-index HEAD~47 path”。如果有人   可以编写一个令人信服的用例,说明它为什么有用,这样的   选项不应该很难添加。

git show @:myFile > myFile

您可以直接从文件所在的文件夹中执行此操作,并使用相对路径:

git show @:./myFile > myFile

答案 2 :(得分:1)

以下是一种逐个文件执行此操作的方法:

# for each staged file :
git show A:path/to/file > path/to/file

git show A:path/to/file将在提交A中输出所述文件的内容。

不完全符合您的要求:使用git stash,您可以在藏匿处保留当前索引的备份:

# optional : stash away modifications which are *not* in index
$ git stash --keep-index  

# 'git stash save' is the same as 'git stash',
# it only allows to put a more explicit message
$ git stash save "index while working on A"

$ git stash list
stash@{0}: On master: index while working on A
stash@{1}: WIP on master: 57632bc first

# you can access your index by using stash@{0} :
#   git show stash@{0}:file
#   git checkout stash@{0} .
#   git stash apply
#   etc ...

答案 3 :(得分:1)

执行此操作的方法是在执行git checkout之前和之后手动备份和恢复索引:

cp .git/index .git/index.bak
git checkout HEAD -- .
mv .git/index.bak .git/index