是否有可能將git中的最後一個階段(未提交)更改取消?假設當前分支中有很多文件,有些是上演的,有些則不是。在某些時候,某些愚蠢的程序員無意中執行:你怎樣才能撤消最後的git add?
git add -- .
...而不是:
git checkout -- .
可以這樣程序員現在unstage他與一些神奇的混帳命令最後的變化?或者他應該在嘗試之前做出承諾?
是否有可能將git中的最後一個階段(未提交)更改取消?假設當前分支中有很多文件,有些是上演的,有些則不是。在某些時候,某些愚蠢的程序員無意中執行:你怎樣才能撤消最後的git add?
git add -- .
...而不是:
git checkout -- .
可以這樣程序員現在unstage他與一些神奇的混帳命令最後的變化?或者他應該在嘗試之前做出承諾?
您可以使用git reset
。這將「暫停」你上次提交後添加的所有文件。
如果您只想取消某些文件的存儲空間,請使用git reset -- <file 1> <file 2> <file n>
。
此外,可以通過使用git reset -p
來取消文件中的某些更改。
有多難過。畢竟,我認爲我的犯罪行爲有問題。接受這個答案,因爲你提到'-p'開關。謝謝! :) – Septagram
生成(對我來說)錯誤:致命:無法解析'HEAD'作爲有效的參考。我還沒有做任何事情(新的回購)剛做完git add。並對此表示遺憾。我不想重置整個添加,只有一個目錄。 git reset - dir /*.*生成上面的錯誤。 –
...啊,我看到了我正在發生的事情。我沒有任何東西指向,所以git重置失敗(因爲它在HEAD上運行)。 –
你可以使用git reset
(見docs)
根據難度的大小和規模,您可以創建一個臨時(臨時)分支並提交當前的工作。
然後切換到並檢出您的原始分支,並從臨時提交中選擇適當的文件。
至少你會有永久記錄的當前和以前的狀態工作(直到你刪除該臨時分支)。
所以,真正的答案
Can this programmer now unstage his last changes with some magical git command?
居然是:不,你不能unstage剛剛過去的git add
。
也就是說,如果我們的解釋了一個問題,在以下情況:隨後git add
void foo(int bar) {
print("$bar");
}
main() {
foo(1337);
}
第二個變化:
初始文件:
void foo() {
}
main() {
foo();
}
第一個變化之後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);
}
以上。
在日期混帳提示:如果
use "git rm --cached <file>..." to unstage
文件沒有在回購協議。它將文件保留在那裏。use "git reset HEAD <file>..." to unstage
如果文件在回購站中,並且您正在修改它們。它保持文件原樣,並將它們分開。據我所知,你不能撤消git add --
,但你可以取消上述文件列表。
從索引中刪除該文件,但保持它的版本,並留下了工作副本提交的修改:
git reset head <file>
文件重置爲從頭部,撤消更改並刪除它們最後的狀態從指數:
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 <file>
git rm --cached <file>
從工作副本和完全版本刪除<file>
如果你想刪除所有添加文件從git的承諾
git reset
如果你想刪除一個單獨的文件
git rm <file>
「呃,不是*我*你懂的。這是另一個傢伙。一些愚蠢的程序員。是的,那是票。另一個人。他。呵呵,呵呵。「[清除喉嚨] – Rap
heh。我們得到了一個有用的問題和回答,但是這個雖然。 – steveha
可能的重複[撤銷'git add'之前提交](http://stackoverflow.com/questions/348170/undo-git-add-before-commit) –