git - 撤消git中未暂存的部分更改

标签 git

如何在 git 中撤消部分未暂存的更改,但将其余部分保持未暂存状态?我想出的方法是:

git commit --interactive
# Choose the parts I want to delete
# Commit the changes
git stash
git rebase -i master # (I am an ancestor of master)
# Delete the line of the most recent commit
git stash apply

这行得通,但如果有类似 git commit --interactive 的东西只用于恢复更改,那就太好了。有什么更好的方法吗?

最佳答案

您可以使用 git checkout -p ,它允许您从工作副本和索引之间的差异中选择要恢复的个人数据 block 。同样,git add -p允许您选择要添加到索引中的帅哥,以及 git reset -p允许您从索引和 HEAD 之间的差异中选择单个 block 以退出索引。

$ git checkout -p file/to/partially/revert
# or ...
$ git checkout -p .

如果您希望预先对您的 git 存储库进行快照以在还原之前保留这些更改,我喜欢这样做:

$ git stash; git stash apply

如果你经常使用它,你可能想给它取个别名:

[alias]
    checkpoint = !git stash; git stash apply

如果你使用一个好的编辑器模式或插件,恢复单个 block 或行会更容易,这可能会支持直接选择要恢复的行,因为 -p 使用起来有点笨拙有时。我用 Magit ,一种对使用 Git 非常有帮助的 Emacs 模式。在 Magit 中,你可以运行 magit-status,找到你想要恢复的变化的差异,选择你想要恢复的行(或者简单地将光标放在你想要恢复的 block 上,如果你想要一次还原一大块而不是一次还原一行),然后按 k 还原那些特定的行。如果您使用 Emacs,我强烈推荐 Magit。

关于git - 撤消git中未暂存的部分更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981830/

相关文章:

git - 从 Mercurial 迁移到 Git 并轻松返回?

java - 无法将网站上的 HTTPS 内容调用到 Android 应用程序

Git - 有没有办法查看作者提交的行数?

ruby-on-rails - 如果我在我的机器上运行不同版本的 Ruby,我如何测试从 GitHub 克隆的某人的 Rails 应用程序?

Git pull 不会获得新标签和新分支,但 git fetch 会

git - 使用部署 Hook 回滚 git 存储库

git - 为什么 git 检测相同行中的冲突?行尾也相同

Git 提交需要很长时间

c# - 我如何通过使用 K&R 而不是 B&D 作为编码标准来证明我与 Git 的冲突最少?

python - 在 Django ORM 之外编辑数据库