你怎么能撤消最后的git add?

是否有可能取消最后阶段(未提交)在git中的更改? 假设当前分支中有很多文件,有些是上演的,有些则不是。 在某些时候,一些愚蠢的程序员意外执行:

git add -- .

...代替:

git checkout -- .

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


你可以使用git reset 。 这将“暂停”你上次提交后添加的所有文件。

如果您只想取消某些文件的存储空间,请使用git reset -- <file 1> <file 2> <file n>

也可以通过使用git reset -p来取消文件中的某些更改。


你不能撤销最新的git add,但你可以撤消自上次提交后的所有add 。 没有提交参数的git reset会重置索引(unstages阶段性更改):

git reset

所以真正的答案

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

实际上是: 不,你不能取消最后的git add

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

初始文件:

void foo() {

}

main() {
    foo();
}

首先改变后面的git add

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

main() {
    foo(1337);
}

第二次更改之后是git add

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);
}

任何更多。

链接地址: http://www.djcxy.com/p/6165.html

上一篇: How can you undo the last git add?

下一篇: Unstage only new files using Git