首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在git中撤消部分未暂存的更改

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

Stack Overflow用户
提问于 2009-12-31 03:00:27
回答 6查看 48.6K关注 0票数 169

如何在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这样的东西只用于恢复更改就更好了。有更好的方法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-31 03:08:14

您可以使用git checkout -p,它允许您从工作副本和索引之间的差异中选择单个块进行还原。同样,git add -p允许您选择要添加到索引中的块,而git reset -p允许您从索引和HEAD之间的差异中选择单个块以退出索引。

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

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

$ git stash; git stash apply

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

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

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

票数 288
EN

Stack Overflow用户

发布于 2011-09-20 04:38:34

git diff > patchfile

然后编辑补丁文件并删除不想撤消的部分,然后:

patch -R < patchfile
票数 30
EN

Stack Overflow用户

发布于 2009-12-31 03:07:15

你可以这样做

git checkout master -- path/to/file

对于要重置的每个文件。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1981830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档