是否有可能取消git中最后一个暂存(未提交)的更改?假设当前分支中有很多文件,有些是阶段性的,有些不是。在某个时刻,某个愚蠢的程序员不小心执行了:

git add -- .

...而不是:

git checkout -- .

这个程序员现在可以用一些神奇的git命令取消他最后的更改吗?或者他应该在一开始尝试之前就做出承诺?


当前回答

你可以使用git重置(见文档)

其他回答

你不能撤销最新的git添加,但是你可以撤销自上次提交以来的所有添加。Git reset不带commit参数会重置索引(取消阶段性变化):

git reset

你可以使用

git reset

撤销最近添加的本地文件

 git reset file_name

来撤消对特定文件的更改

你可以使用git重置(见文档)

如果你想从git中删除所有添加的文件

git reset

如果要删除单个文件

git rm <file>

所以真正的答案是

这个程序员现在可以用一些神奇的git命令取消他最后的更改吗?

实际上是:不,你不能只取消最后一个git添加。

也就是说,如果我们在以下情况下解释这个问题:

最初的文件:

void foo() {

}

main() {
    foo();
}

git添加的第一个变化:

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

git添加后的第二个变化:

void foo(int bar, String baz) {
    print("$bar $baz");
}

main() {
    foo(1337, "h4x0r");
}

在这种情况下,git reset -p将不起作用,因为它的最小粒度是行。Git不知道中间状态:

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

任何更多的。