是否有可能取消git中最后一个暂存(未提交)的更改?假设当前分支中有很多文件,有些是阶段性的,有些不是。在某个时刻,某个愚蠢的程序员不小心执行了:
git add -- .
...而不是:
git checkout -- .
这个程序员现在可以用一些神奇的git命令取消他最后的更改吗?或者他应该在一开始尝试之前就做出承诺?
是否有可能取消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);
}
任何更多的。