恢复和取消

时间:2013-11-13 19:01:01

标签: git

我们都知道,您可以使用git revert --no-commit撤消特定更改的更改。这会更新工作副本索引,但不会提交恢复。有没有办法进一步采取这一步更新工作副本而不更新索引? (即改变将是不明显的)。我知道您可以使用git checkout来获取特定提交的工作副本,但这也会创建一个分离的头。我只想用恢复的更改来更新工作副本。

2 个答案:

答案 0 :(得分:3)

您可以使用临时索引保持原始索引不受干扰:

true_index=$(git rev-parse --git-dir)/index
export GIT_INDEX_FILE=.mytmpindex    
cp "$true_index" .mytmpindex
git revert -n  <some-commit-id>
rm .mytmpindex
unset GIT_INDEX_FILE

如果您没有希望保留的分阶段更改,则可以执行以下操作:

git revert -n <some-commit-id>
git reset

答案 1 :(得分:2)

如果您想要访问的树状态已经存在于您的历史记录中(例如,您正在恢复最新提交并且绝对希望以这种方式执行),只需连续使用两个重置:

wished_index=$(git rev-parse HEAD)
git reset --hard $wished_tree
git reset $wished_index

如果没有,您仍然可以使用revert,之后您只需要修改索引:

git revert $commit
git reset HEAD^

两种方式都需要一个干净的工作树(否则git stash到达那里)并留下一个肮脏的树。