Как да отменя 'git add' преди да извърша commit?

Погрешно добавих файлове в Git, като използвах командата:

git add myfile.txt

Все още не съм стартирал git commit. Има ли начин да върна това, така че тези файлове да не бъдат включени в commit-а?

Решение

Можете да отмените git add преди предаването с

git reset 

което ще го премахне от текущия индекс (списъкът "ще бъде предаден"), без да променя нищо друго.

Можете да използвате

git reset

без име на файл, за да отмените всички дължими промени. Това може да е полезно, когато има твърде много файлове, за да бъдат изброени един по един за разумно време.

В старите версии на Git горните команди са еквивалентни съответно на git reset HEAD и git reset HEAD и ще се провалят, ако HEAD е недефинирано (защото все още не сте'направили никакви промени в хранилището си) или двусмислено (защото сте създали клон, наречен HEAD, което е глупаво нещо, което не бива'да правите). Това обаче беше променено в Git 1.8.2, така че в съвременните версии на Git можете да използвате горните команди дори преди да сте направили първия си commit:

"git reset" (без опции или параметри) се използваше за грешка, когато нямате никакви предавания в историята си, но сега тя ви дава празен индекс (за да съответства на несъществуващ коммит, на който дори не сте влезли).

Коментари (11)

Ако въведете:

git status

Git ще ви каже какво е поетапно и т.н., включително инструкции как да го премахнете:

use "git reset HEAD ..." to unstage

Смятам, че Git върши доста добра работа, като ме подтиква да постъпвам правилно в подобни ситуации.

Забележка: Последните версии на Git (1.8.4.x) са променили това съобщение:

(use "git rm --cached ..." to unstage)
Коментари (3)

За тази цел може да се използва git remove или git rm с флаг --cached. Опитайте:

git help rm
Коментари (2)