复位后恢复舞台状态
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
创建两个提交:
- 一个用于暂存区的内容,
- 一个用于所有修改文件的内容
这是命令的输出:
$ 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
|\
...
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
创建两个提交:- 一个用于暂存区的内容,
- 一个用于所有修改文件的内容
这是命令的输出:
$ 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
|\
...