撤消本地更改交互式

时间:2014-04-25 14:30:03

标签: git workflow

我经常在开发时添加一些调试代码,所以我需要稍后删除这些更改。

目前,我检查git diff并手动删除更改,或者只要我想要撤消整个文件,只需输入git checkout -- myfilename

我喜欢交互式补丁功能(git add -i)。在git中是否有工具或命令可以撤消交互式更改,如git add -i

换句话说:我想以交互方式检出索引中的文件和数据。

2 个答案:

答案 0 :(得分:3)

您认为我想要的是git reset --patchgit 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你可以选择你重置的内容。


修改

git checkout Manual Page所述:

  

-p

     

- 补丁

     

以交互方式选择(或索引,如果未指定)和工作树之间的差异。然后将所选择的帅哥反向应用于工作树(如果指定了a,则为索引)。

     

这意味着您可以使用git checkout -p选择性地丢弃当前工作树中的编辑内容。请参阅git-add(1)的“交互模式”部分,了解如何操作--patch模式。

所以你要找的命令是

$git checkout -p

答案 1 :(得分:0)

在Git 2.25(2020年第一季度)之前,“ git reset --patch $object”在新的存储库(尚无提交)中不起作用。

没有任何路径说明,它应该允许提供树对象,但错误地要求提交已纠正的承诺。

请参见commit 0a8e303Nika 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”的限制。