相当于:git reset --hard --patch?

时间:2016-04-18 15:29:05

标签: git

是否可以做同等级的git reset --hard --patch? (因为这给了我:fatal: --patch is incompatible with --{hard,mixed,soft})。

换句话说,如何做git reset --patch,但有"未分期"变化立即丢弃? (特别是对于新添加的文件 - 我不希望它们乱丢我的工作目录,因为我已经把它放在其他东西上了......所以很难找到新的垃圾来手工删除它...)

编辑:或者,可能是"多个临时区域",其中块可以像 - 使用--patch一样轻松地从一个传递到另一个?

edit2:上述问题似乎并不清楚,所以我将从以下评论中复制免责声明:请注意我不想有任何文件显示为"新文件" in"要做出的改变"在git status的输出中移动到"未跟踪文件"。并且对于每个文件,我希望能够明确地决定是否要保留它们或永久丢弃它们(即删除它们)来自磁盘)。

换句话说:我试图将提交分成两部分,但我有一些"新文件"在里面。其中一些我想进入"另一半"提交。但是我不想一直从“#34;未跟踪文件”列表中逐一添加它们。

再次

edit3:澄清:我有很多"未跟踪文件"因为一个或其他原因,我不想加入.gitignore或.git / info / exclude。

2 个答案:

答案 0 :(得分:6)

git reset --hard旨在让您在任何情况下都处于干净状态:如果您有分阶段或未分阶段的更改,如果您的索引中存在冲突,则它会起作用,......在这些情况下,{--patch 1}}选项不会有意义。

实际上,对于最终用户来说,git reset --hard通常不是一个好主意:它不仅会丢弃更改,而且会以不可恢复的方式执行此操作。与此相反,git stash保留了更改。它既可以用于“我想暂时将这些更改放在一边,我会尽快将它们取回”或“我知道我想永久地丢弃这些更改,但我会保留备份以防万一”。

正如您已经指出的那样,git stash有一个--patch选项,所以这显然是一个很好的解决方案。另一种方法是使用git reset --patch(不使用--hard)将索引置于所需状态,然后git stash --keep-index使工作树与索引匹配。

如果更改足够大,您需要担心磁盘空间使用情况,或者您只是不想将混乱添加到存储列表,则可以运行git stash drop以删除存储条目

答案 1 :(得分:-1)

我找到了一个解决方法:将repo克隆到临时目录,然后我可以git reset -pgit add .按照我的意愿编辑提交,而不是被额外的未跟踪文件困扰。

然而,存在明显的缺点,包括不自动克隆钩子的事实。任何硬编码路径都不起作用(包括PATH,GOPATH,IDE等项目)。