How can you undo the last git add?
是否可以取消Git中最后阶段(未提交)的更改?假设当前分支中有很多文件,一些是分阶段的,一些不是。在某种程度上,一些愚蠢的程序员意外地执行了:
1 | git add -- . |
……代替:
1 | git checkout -- . |
这个程序员现在能用一些神奇的git命令取消他最后的更改吗?或者,他应该在实验之前就做出承诺吗?
您可以使用
如果只想取消某些文件的存储,请使用
此外,还可以使用
您不能撤消最新的git add,但可以撤消自上次提交以来的所有
1 | git reset |
所以真正的答案是
Can this programmer now unstage his last changes with some magical git command?
实际上是:不,你不能只拆下最后一个
也就是说,如果我们将问题解释为以下情况:
初始文件:
1 2 3 4 5 6 7 | void foo() { } main() { foo(); } |
第一次变更后接
1 2 3 4 5 6 7 | void foo(int bar) { print("$bar"); } main() { foo(1337); } |
第二次变更后接
1 2 3 4 5 6 7 | void foo(int bar, String baz) { print("$bar $baz"); } main() { foo(1337,"h4x0r"); } |
在这种情况下,
1 2 3 4 5 6 7 | void foo(int bar) { print("$bar"); } main() { foo(1337); } |
再。
您可以使用
在Git提示的日期:
据我所知,您不能撤消
如果要从git中删除所有添加的文件以进行提交
1 | git reset |
如果要删除单个文件
1 | git rm <file> |
从索引中删除该文件,但保持其版本化,并在工作副本中保留未提交的更改:
1git reset head <file>将文件从头重设为最后一个状态,撤消更改并将其从索引中删除:
1
2
3
4
5git reset HEAD <file>
git checkout <file>
# If you have a `<branch>` named like `<file>`, use:
git checkout -- <file>这是必需的,因为
git reset --hard HEAD 不适用于单个文件。从索引和版本控制中删除
,将未版本控制的文件保留在工作副本中:1git rm --cached <file>完全删除工作副本和版本控制中的
:1git rm <file>
根据困难的大小和规模,您可以创建一个临时分支并在那里提交当前工作。
然后切换到并签出原始分支,并从零开始提交中选择适当的文件。
至少您有一个当前和以前状态的永久记录,可以从中工作(直到您删除该草稿分支)。