我经常在开发时添加一些调试代码,所以我需要稍后删除这些更改。
目前,我检查git diff
并手动删除更改,或者只要我想要撤消整个文件,只需输入git checkout -- myfilename
。
我喜欢交互式补丁功能(git add -i
)。在git中是否有工具或命令可以撤消交互式更改,如git add -i
?
换句话说:我想以交互方式检出索引中的文件和数据。
答案 0 :(得分:3)
您认为我想要的是git reset --patch
或git reset -p
来自the docs:
git reset(--patch | -p)[] [ - ] [...]
以索引和(默认为HEAD)之间的差异交互式选择帅哥。选择的帅哥与指数相反。
这意味着git reset -p与git add -p相反,即你可以用它来有选择地重置帅哥。请参阅git-add(1)的“交互模式”部分,了解如何操作--patch模式。
和约git add -p
it says
<强> -p 强>
在索引和工作树之间以交互方式选择补丁,并将它们添加到索引中。这使用户有机会在将修改后的内容添加到索引之前查看差异。
这有效地运行了add --interactive ,但绕过了初始命令菜单并直接跳转到patch子命令。有关详细信息,请参阅“交互模式”。
所以基本上git reset -p
你可以选择你重置的内容。
修改强>
-p
- 补丁
以交互方式选择(或索引,如果未指定)和工作树之间的差异。然后将所选择的帅哥反向应用于工作树(如果指定了a,则为索引)。
这意味着您可以使用git checkout -p选择性地丢弃当前工作树中的编辑内容。请参阅git-add(1)的“交互模式”部分,了解如何操作--patch模式。
所以你要找的命令是
$git checkout -p
答案 1 :(得分:0)
在Git 2.25(2020年第一季度)之前,“ git reset --patch
$object
”在新的存储库(尚无提交)中不起作用。
没有任何路径说明,它应该允许提供树对象,但错误地要求提交已纠正的承诺。
请参见commit 0a8e303的Nika Layzell (mystor
)(2019年11月24日)。
(由Junio C Hamano -- gitster
--在commit 6b3cb32中合并,2019年12月5日)
reset
:在补丁模式下将rev解析为树状签名人:Nika Layzell
由于2f328c3d(“
reset $sha1 $pathspec
:仅要求$ sha1是树状的”,2013-01-14,Git v1.8.2-rc0-merge),我们允许“git reset
$object -- $path
”以重置与pathspec匹配的单个路径,以从树对象中获取blob(不一定是提交),而将当前分支的尖端重置为其他提交的形式仍然必须会被提交。就像使用路径重置一样,“
git reset --patch
”不会更新HEAD,并且不需要提交。
自git reset --patch
起,经过路径过滤的格式“ 2f328c3d$object -- $pathspec
”已经开始接受树状装饰。“
git reset --patch
”自bf44142f起被记录为接受<tree-ish>
(“reset
:更新文档以仅要求带有路径的树状结构”,2013-01- 16,Git v1.8.2-rc0-merge)。
无需更改文档。松开要求提交未经过滤的“
git reset --patch
$object
”的限制。