git revert --no-commit
众所周知,您可以使用来撤消特定更改的更改。这会更新工作副本和索引,但不会提交还原。有没有办法更进一步,只更新工作副本而不更新索引?(即更改将是unsteded)。我知道您可以使用它git checkout
来获取特定提交的工作副本,但这也会创建一个分离的头。我只想用还原的更改来更新工作副本。
问问题
355 次
2 回答
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
于 2013-11-13T22:59:23.067 回答
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
才能到达那里),而给你留下一棵肮脏的树。
于 2013-11-13T23:07:51.460 回答