是否可以取消登载git的最后一个登台(未提交)更改?假设当前分支中有很多文件,有些已上演,有些则没有。在某些时候,一些愚蠢的程序员不小心执行了:
git add -- .
...代替:
git checkout -- .
现在,该程序员可以使用一些神奇的git命令来取消最后一次更改吗?还是他应该先进行实验才能做出承诺?
git add命令所添加的更改,尤其是对于已经进行了更改的文件,以及一些将要撤消而不进行更改的文件。不能说其他问题无关。
是否可以取消登载git的最后一个登台(未提交)更改?假设当前分支中有很多文件,有些已上演,有些则没有。在某些时候,一些愚蠢的程序员不小心执行了:
git add -- .
...代替:
git checkout -- .
现在,该程序员可以使用一些神奇的git命令来取消最后一次更改吗?还是他应该先进行实验才能做出承诺?
git add命令所添加的更改,尤其是对于已经进行了更改的文件,以及一些将要撤消而不进行更改的文件。不能说其他问题无关。
Answers:
您可以使用git reset。这将“取消登台”您上次提交后添加的所有文件。
如果只想取消转储某些文件,请使用git reset -- <file 1> <file 2> <file n>。
也可以通过使用取消暂存文件中的某些更改git reset -p。
-p开关。谢谢!:)
您不能撤消最新的 git add,但是可以撤消add自上一次提交以来的所有。git reset如果没有提交参数,则会重置索引(取消阶段化的更改):
git reset
reset单个文件,也可以reset -p用于取消暂存特定的块。
所以真正的答案
现在,该程序员可以使用一些神奇的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);
}
还有。
从索引中删除文件,但保持版本化,并保留工作副本中未提交的更改:
git reset head <file>
将文件重置为HEAD的最后一个状态,撤消更改并将其从索引中删除:
git reset HEAD <file>
git checkout <file>
# If you have a `<branch>` named like `<file>`, use:
git checkout -- <file>
这是必需的,因为它git reset --hard HEAD不适用于单个文件。
<file>从索引和版本控制中删除,使未版本化的文件保持工作副本中的更改:
git rm --cached <file>
<file>从工作副本和版本中完全删除:
git rm <file>
您可以使用
git reset
撤消最近添加的本地文件
git reset file_name
撤消对特定文件的更改