复位后恢复舞台状态

Recover stage state after reset

git reset --mixed 之后,我之前暂存的新文件取消暂存。
是否可以恢复 git reset 执行前的阶段状态?

您可以重新添加文件:

git add path/to/the/file

如果只有部分文件被暂存,您可以补丁添加:

git add --patch path/to/the/file

不幸的是,git 不会自动存储暂存历史记录,没有直接的方法可以将索引恢复到之前的状态。


以后,您可以采取以下措施:

  • 更频繁地提交
  • 一个变体:提交然后回滚:

    # add stuff :
    git add ... / git add -p ...
    
    git commit -m "work in progress"
    git reset --soft HEAD^
    

    这将在当前分支的 reflog 中添加创建的提交,
    使用 git reset --soft 将保留暂存区

  • 使用git stash && git stash apply
    git stash 创建两个提交:

    1. 一个用于暂存区的内容,
    2. 一个用于所有修改文件的内容

这是命令的输出:

$ git stash && git stash apply
Saved working directory and index state WIP on master: 7475d1d {message}
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
[...]

这是隐藏提交的样子:

    $ git log --oneline --graph stash@{0}
    *   79d9cd7 (refs/stash) WIP on master: 7475d1d {message} # <- full stash
    |\  
    | * 43f3da0 index on master: 7475d1d {message}            # <- staging area's content
    |/  
    *   7475d1d (HEAD -> master, origin/master) {message}     # <- current active commit
    |\
    ...