是否可以做同等级的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。
答案 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 -p
和git add .
按照我的意愿编辑提交,而不是被额外的未跟踪文件困扰。
然而,存在明显的缺点,包括不自动克隆钩子的事实。任何硬编码路径都不起作用(包括PATH,GOPATH,IDE等项目)。