是否有可能取消git中最后一个阶段(未提交)的更改?假设当前分支中有很多文件,有些是暂存的,有些则没有.在某些时候,一些愚蠢的程序员意外地执行了:
git add -- .
Run Code Online (Sandbox Code Playgroud)
...代替:
git checkout -- .
Run Code Online (Sandbox Code Playgroud)
这个程序员现在可以通过一些神奇的git命令取消他的最后一次更改吗?或者他应该在首先尝试之前做出承诺?
tha*_*era 290
你可以用git reset.这将"取消"您上次提交后添加的所有文件.
如果您只想取消暂停某些文件,请使用git reset -- <file 1> <file 2> <file n>.
此外,还可以通过使用来取消暂存文件中的某些更改git reset -p.
kni*_*ttl 39
你无法撤消最新的 git add,但你可以撤消add自上次提交以来的所有内容.git reset没有commit参数会重置索引(unstages staged changes):
git reset
Run Code Online (Sandbox Code Playgroud)
sta*_*anm 15
所以真正的答案
这个程序员现在可以通过一些神奇的git命令取消他的最后一次更改吗?
实际上是:不,你不能只是最后一次git add.
那就是如果我们将问题解释为以下情况:
初始档案:
void foo() {
}
main() {
foo();
}
Run Code Online (Sandbox Code Playgroud)
首先改变后跟git add:
void foo(int bar) {
print("$bar");
}
main() {
foo(1337);
}
Run Code Online (Sandbox Code Playgroud)
第二次改变后跟git add:
void foo(int bar, String baz) {
print("$bar $baz");
}
main() {
foo(1337, "h4x0r");
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,git reset -p无济于事,因为它的最小粒度是线条.git不知道关于中间状态:
void foo(int bar) {
print("$bar");
}
main() {
foo(1337);
}
Run Code Online (Sandbox Code Playgroud)
更多.
| 归档时间: |
|
| 查看次数: |
164542 次 |
| 最近记录: |