Как отменить 'git add' перед коммитом?

7856

Я по ошибке добавил файлы в git с помощью команды:

git add myfile.txt

Я еще не запускал git commit. Есть ли способ отменить это, чтобы эти файлы не были включены в коммит?


На данный момент есть 48 ответов (некоторые удалены).Пожалуйста, не добавляйте новый, если у вас нет новой информации.

  • 14
    Начиная с Git версии 1.8.4, все ответы ниже этого использования HEAD или head может теперь использовать @ вместо HEAD вместо этого. Посмотрите этот ответ (последний раздел), чтобы узнать, почему вы можете это сделать.
  • 2
    Я сделал небольшое резюме, которое показывает все способы удаления файла: stackoverflow.com/questions/6919121/…
Показать ещё 8 комментариев
Теги:
version-control
git-commit
git-stage

34 ответа

9292
Лучший ответ

Вы можете отменить git add перед фиксацией с помощью

git reset <file>

который удалит его из текущего индекса (список "about to be commit" ) без изменения чего-либо еще.

Вы можете использовать

git reset

без какого-либо имени файла, чтобы отключить все изменения. Это может пригодиться, когда слишком много файлов будут перечисляться один за другим в разумные сроки.

В старых версиях Git приведенные выше команды эквивалентны git reset HEAD <file> и git reset HEAD соответственно, и не удастся, если HEAD - undefined (потому что вы еще не совершили никаких коммитов в своем репо ) или неоднозначно (потому что вы создали ветвь с именем HEAD, которая является глупой вещью, которую вы не должны делать). Этот был изменен в Git 1.8.2, хотя в современных версиях Git вы можете использовать вышеприведенные команды еще до создания ваша первая фиксация:

"git reset" (без параметров или параметров), используемых для    у вас нет никаких фиксаций в вашей истории, но теперь это дает вам    пустой индекс (для соответствия non- существующий commit вы даже не включены).

  • 67
    Конечно, это не настоящая отмена, потому что, если неправильный git add перезаписал предыдущую подготовленную незафиксированную версию, мы не сможем ее восстановить. Я попытался уточнить это в своем ответе ниже.
  • 5
    git reset HEAD *.ext где ext - файлы с заданным расширением, которые вы хотите удалить. Для меня это было *.bmp & *.zip
Показать ещё 11 комментариев
2013

Ты хочешь:

git rm --cached <added_file_to_undo>

Обоснование:

Когда я был новичком в этом, я впервые попробовал

git reset .

(чтобы отменить все мои начальные добавления), только чтобы получить это (не очень) полезное сообщение:

fatal: Failed to resolve 'HEAD' as a valid ref.

Оказывается, это потому, что ссылка HEAD (ветвь?) Существует только после первого коммита. То есть вы столкнетесь с той же проблемой новичка, что и я, если ваш рабочий процесс, такой как у меня, будет выглядеть примерно так:

  1. Перейдите в мой новый каталог проектов, чтобы опробовать Git, новую горячность
  2. git init
  3. git add.
  4. git status

    ... много дерьмовых свитков...

    => Черт, я не хотел добавлять все это.

  5. google "отменить git add"

    => найти переполнение стека - ууу

  6. git reset.

    => fatal: Не удалось разрешить 'HEAD' в качестве действительного ссылки.

Кроме того, выясняется, что в списке рассылки зарегистрировано сообщение об ошибке.

И что правильное решение было прямо там, в выводе статуса Git (который, да, я назвал "дерьмом")

...
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
...

И решение действительно состоит в том, чтобы использовать git rm --cached FILE.

Обратите внимание на предупреждения в другом месте здесь - git rm удаляет вашу локальную рабочую копию файла, но не если вы используете --cached. Вот результат git help rm:

--cached Используйте эту опцию, чтобы удалять и удалять пути только из индекса. Файлы рабочего дерева, модифицированные или нет, останутся.

Я приступаю к использованию

git rm --cached .

удалить все и начать заново. Не сработало, потому что, хотя add. является рекурсивным, оказывается, что rm нуждается в -r для рекурсии. Вздох.

git rm -r --cached .

Хорошо, теперь я вернулся к тому, с чего начал. В следующий раз я собираюсь использовать -n для -n прогона и посмотреть, что будет добавлено:

git add -n .

Я заархивировал все в безопасное место, прежде чем доверять git help rm о том, что --cached ничего не уничтожает (и что, если я его неправильно написал).

  • 0
    Не просто "git reset" без. делай что хочешь, или я что-то упустил?
  • 11
    Хах. Я следовал этому же процессу. За исключением того, что я сдался и сказал rm -rf .git , git init потому что я не доверял git rm --cached для сохранения моей рабочей копии. Это говорит немного о том, как git все еще слишком сложен в некоторых местах. git unstage должна быть просто стандартной командой, мне все равно, могу ли я добавить ее как псевдоним.
Показать ещё 21 комментарий
522

Если вы наберете:

git status

git расскажет вам, что устраивается и т.д., включая инструкции о том, как отключиться:

use "git reset HEAD <file>..." to unstage

Я нахожу, что git делает довольно хорошую работу, подталкивая меня к тому, чтобы делать правильные вещи в таких ситуациях.

Примечание. Последние версии git (1.8.4.x) изменили это сообщение:

(use "git rm --cached <file>..." to unstage)
  • 13
    Сообщение будет отличаться в зависимости от того, отслеживался ли уже add файл ( add только сохранило новую версию в кеш - здесь будет показано ваше сообщение). В другом месте, если файл не был предварительно подготовлен, он будет отображать use "git rm --cached <file>..." to unstage
  • 0
    Большой! git reset HEAD <file> one - единственный, который будет работать, если вы хотите отменить удаление файла
Показать ещё 1 комментарий
221

Чтобы уточнить: git add перемещает изменения из текущего рабочего каталога в промежуточную область (индекс).

Этот процесс называется промежуточным. Таким образом, самая естественная команда для смены изменений (измененных файлов) очевидна:

git stage

git add - это просто псевдоним для git stage

Жаль, что нет команд git unstage и git unadd. Соответствующий вопрос сложнее угадать или запомнить, но довольно очевидно:

git reset HEAD --

Мы можем легко создать псевдоним для этого:

git config --global alias.unadd 'reset HEAD --'
git config --global alias.unstage 'reset HEAD --'

И, наконец, у нас есть новые команды:

git add file1
git stage file2
git unadd file2
git unstage file1

Лично я использую еще более короткие псевдонимы:

git a #for staging
git u #for unstaging
  • 2
    «движется»? Это указало бы, что это ушло из рабочего каталога. Это не тот случай.
  • 3
    Почему это очевидно?
Показать ещё 1 комментарий
146

В дополнение к принятому ответу, если ваш ошибочно добавленный файл был огромным, вы, вероятно, заметите, что даже после удаления его из индекса с помощью " git reset " он все равно занимает место в каталоге .git. Об этом не стоит беспокоиться, файл действительно все еще находится в репозитории, но только как "свободный объект", он не будет скопирован в другие репозитории (через клон, push), и пространство в конечном итоге будет освобождено - хотя возможно, не очень скоро. Если вы беспокоитесь, вы можете запустить:

git gc --prune=now

Обновление (далее я попытаюсь устранить некоторую путаницу, которая может возникнуть из ответов с наибольшим количеством голосов):

Итак, что же является настоящей отменой git add?

git reset HEAD <file>?

или же

git rm --cached <file>?

Строго говоря, и если я не ошибаюсь: нет.

git add нельзя отменить - безопасно, в общем.

Давайте сначала вспомним, что на самом деле делает git add <file>:

  1. Если <file> ранее не отслеживался, git add добавляет его в кеш с его текущим содержимым.

  2. Если <file> уже отслежен, git add сохраняет текущий контент (снимок, версия) в кеш. В GIT это действие все еще называется добавлением (а не просто обновлением), потому что две разные версии (снимки) файла рассматриваются как два разных элемента: следовательно, мы действительно добавляем новый элемент в кэш, чтобы в конечном итоге совершено позже.

В свете этого вопрос несколько двусмысленный:

Я по ошибке добавил файлы с помощью команды...

Сценарий OP кажется первым (неотслеживаемый файл), мы хотим, чтобы "отмена" удаляла файл (а не только текущее содержимое) из отслеживаемых элементов. Если это так, тогда можно запустить git rm --cached <file>.

И мы также можем запустить git reset HEAD <file>. В целом это предпочтительнее, потому что это работает в обоих сценариях: оно также отменяет действия, когда мы ошибочно добавили версию уже отслеженного элемента.

Но есть две оговорки.

Во-первых: существует (как указано в ответе) только один сценарий, в котором git reset HEAD не работает, но git rm --cached работает: новый репозиторий (без фиксаций). Но, на самом деле, это практически неактуальный случай.

Второе: имейте в виду, что git reset HEAD не может волшебным образом восстановить ранее кэшированное содержимое файла, он просто повторно синхронизирует его с HEAD. Если наш неверный git add перезаписал предыдущую готовую незафиксированную версию, мы не сможем ее восстановить. Поэтому, строго говоря, мы не можем отменить [*].

Пример:

$ git init
$ echo "version 1" > file.txt
$ git add file.txt   # first add  of file.txt
$ git commit -m 'first commit'
$ echo "version 2" > file.txt
$ git add  file.txt   # stage (don't commit) "version 2" of file.txt
$ git diff --cached file.txt
-version 1
+version 2
$ echo "version 3" > file.txt   
$ git diff  file.txt
-version 2
+version 3
$ git add  file.txt    # oops we didn't mean this
$ git reset HEAD file.txt  # undo ?
$ git diff --cached file.txt  # no dif, of course. stage == HEAD
$ git diff file.txt   # we have lost irrevocably "version 2"
-version 1
+version 3

Конечно, это не очень важно, если мы просто следуем обычному ленивому рабочему процессу выполнения 'git add' только для добавления новых файлов (случай 1), и мы обновляем новое содержимое с помощью команды commit, git commit -a.


* (Редактировать: вышеупомянутое практически правильно, но все же могут быть несколько хакерские/запутанные способы восстановления изменений, которые были поставлены, но не зафиксированы, а затем перезаписаны - см. Комментарии Йоханнеса Матокича и iolsmit)

  • 3
    Строго говоря, есть способ восстановить уже подготовленный файл, который был заменен на git add. Как вы упомянули, git add создает объект git для этого файла, который станет свободным объектом не только при полном удалении файла, но и при перезаписи новым содержимым. Но нет команды для автоматического восстановления. Вместо этого файл должен быть идентифицирован и извлечен вручную или с помощью инструментов, написанных только для этого случая (libgit2 позволит это). Но это окупится только в том случае, если файл очень важный и большой и не может быть восстановлен путем редактирования предыдущей версии.
  • 2
    Чтобы исправить себя: Как только свободный объектный файл найден (используйте метаданные, такие как дата / время создания), git cat-file может быть использован для восстановления его содержимого.
Показать ещё 1 комментарий
85
git rm --cached . -r

будет "un- добавить" все, что вы добавили из текущего каталога рекурсивно

  • 3
    Я не хотел удалять все, только один конкретный файл.
  • 3
    Также полезно, если у вас нет предыдущих коммитов. В случае отсутствия предыдущего коммита, git reset HEAD <file> сказал бы fatal: Failed to resolve 'HEAD' as a valid ref.
Показать ещё 1 комментарий
83

Run

git gui

и удалите все файлы вручную или выбрав все из них и нажав кнопку фиксации с фиксацией.

  • 1
    Да, я понимаю это. Я только хотел неявно предложить, чтобы вы указали, что в вашем ответе типа "Вы можете использовать git-gui ...." :)
  • 1
    Там написано "git-gui: команда не найдена". Я не уверен, что это работает.
75

Git имеет команды для каждого действия, которое только можно вообразить, но нуждается в обширных знаниях, чтобы все исправить, и из-за этого он counter- интуитивно понятен в лучшем случае...

Что вы делали раньше:

  • Изменен файл и используется git add ., или git add <file>.

Что вы хотите:

  • Удалите файл из индекса, но сохраните его в версиях и оставите с незафиксированными изменениями в рабочей копии:

    git reset head <file>
    
  • Reset файл с последним состоянием из HEAD, отменив изменения и удалив их из индекса:

    # Think `svn revert <file>` IIRC.
    git reset HEAD <file>
    git checkout <file>
    
    # If you have a `<branch>` named like `<file>`, use:
    git checkout -- <file>
    

    Это необходимо, так как git reset --hard HEAD не будет работать с отдельными файлами.

  • Удалите <file> из индекса и версии, сохраняя файл с версией un- с изменениями в рабочей копии:

    git rm --cached <file>
    
  • Удалите <file> из рабочей копии и версии:

    git rm <file>
    
  • 1
    Я не могу понять разницу между 'git reset head <file>' и 'git rm --cached <file>. Не могли бы вы объяснить это?
  • 5
    Файлы @jeswang либо «известны» git (изменения в них отслеживаются), либо они не «версионированы». reset head отменяет ваши текущие изменения, но git по-прежнему отслеживает файл. rm --cached выводит файл из-под контроля версий, поэтому git больше не проверяет его на наличие изменений (а также удаляет в конечном итоге проиндексированные текущие изменения, сообщенные git предыдущим add ), но измененный файл будет сохранен в вашей рабочей копии, что находится в папке с файлами на жестком диске.
Показать ещё 1 комментарий
74

Отменить файл, который уже был добавлен, довольно просто, используя git, для сброса myfile.txt который уже был добавлен, используйте:

git reset HEAD myfile.txt

Объясните:

После того, как вы поставили ненужные файлы, чтобы отменить их, вы можете выполнить git reset, Head - это git reset вашего файла в локальной сети, а последний параметр - это имя вашего файла.

Я создаю шаги, изображенные на рисунке ниже, более подробно для вас, включая все шаги, которые могут произойти в следующих случаях:

Изображение 7430

  • 1
    УДИВИТЕЛЬНО!!!!!!!!!!!!!!!!!!!!!
69

Вопрос явно не задан. Причина в том, что git add имеет два значения:

  • добавление нового файла в промежуточную область, затем отмените с помощью git rm --cached file.
  • добавление файла измененного в промежуточную область, затем отмените с помощью git reset HEAD file.

, если есть сомнения, используйте

git reset HEAD file

Потому что в обоих случаях ожидается ожидаемая вещь.

Предупреждение:, если вы делаете git rm --cached file в файле изменен (файл, существовавший ранее в репозитории), то файл будет удален в git commit! Он все равно будет существовать в вашей файловой системе, но если кто-то еще потянет вашу фиксацию, файл будет удален из своего рабочего дерева.

git status расскажет вам, был ли файл новым файлом или изменен:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   my_new_file.txt
    modified:   my_modified_file.txt
  • 4
    +1. Чрезвычайное количество высокооплачиваемых ответов и комментариев на этой странице просто неверно git rm --cached somefile поведение git rm --cached somefile . Я надеюсь, что этот ответ поднимется по странице на видное место, где он сможет защитить новичков от введения в заблуждение всеми ложными утверждениями.
56

Если вы используете свою первоначальную фиксацию и не можете использовать git reset, просто объявите "Git банкротство" и удалите папку .git и начните с нее

  • 5
    Один из советов - скопировать файл .git / config, если вы добавили удаленный источник, перед удалением папки.
  • 3
    @ChrisJohnsen комментарий на месте. Иногда вы хотите зафиксировать все файлы, кроме одного: git add -A && git rm --cached EXCLUDEFILE && git commit -m 'awesome commit' (Это также работает, когда нет предыдущих коммитов, но не Failed to resolve 'HEAD' )
52

Как и во многих других ответах, вы можете использовать git reset

НО:

Я нашел это замечательное сообщение, которое фактически добавляет команду Git (ну алиас) для git unadd: см. git unadd для деталей или..

Просто,

git config --global alias.unadd "reset HEAD"

Теперь вы можете

git unadd foo.txt bar.txt
45

git remove или git rm можно использовать для этого с флагом --cached. Попробуйте:

git help rm
  • 7
    Разве это не собирается удалить файл вообще?
  • 1
    git rm --cached ... удалит файлы из git rm --cached ... git. Они все еще будут существовать на вашем компьютере, но это ОЧЕНЬ отличается от постоянных изменений в файле. Для любого, кто наткнулся на это, это неправильный ответ на вопрос.
39

Используйте git add -i, чтобы удалить just- добавленные файлы из вашего предстоящего коммита. Пример:

Добавление файла, который вам не нужен:

$ git add foo
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]#

Включение интерактивного добавления для отмены вашего добавления (команды, набранные в git здесь: "r" (возврат), "1" (первая запись в списке вернется), "возврат" к выходу из режима возврата, и "q" (quit):

$ git add -i
           staged     unstaged path
  1:        +1/-0      nothing foo

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +1/-0      nothing [f]oo
Revert>> 1
           staged     unstaged path
* 1:        +1/-0      nothing [f]oo
Revert>> 
note: foo is untracked now.
reverted one path

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> q
Bye.
$

Что это! Здесь ваше доказательство, показывающее, что "foo" возвращается в список без следа:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]
#       foo
nothing added to commit but untracked files present (use "git add" to track)
$
35

Здесь можно избежать этой неприятной проблемы при запуске нового проекта:

  • Создайте основной каталог для вашего нового проекта.
  • Запустите git init.
  • Теперь создайте файл .gitignore (даже если он пуст).
  • Зафиксируйте файл .gitignore.

Git делает очень трудным сделать git reset, если у вас нет коммитов. Если вы создаете крошечный первоначальный коммит только ради его, после этого вы можете git add -A и git reset столько раз, сколько хотите, чтобы все было правильно.

Другим преимуществом этого метода является то, что если вы столкнетесь с line- проблемами завершения позже и вам нужно обновить все ваши файлы, легко:

  • Отметьте, что начальная фиксация. Это приведет к удалению всех ваших файлов.
  • Затем снова проверьте свою последнюю фиксацию. Это приведет к восстановлению свежих копий ваших файлов, используя текущие настройки окончания line-.
  • 1
    Подтверждено! Попробовал сброс git после добавления git. и мерзавец жаловался на коррумпированную ГОЛОВУ. Следуя твоему совету, я могу без проблем добавить и сбросить туда и обратно :)
  • 1
    Вторая часть работает, но она немного неуклюжа. То, как обрабатываются окончания строк, зависит от значения autocrlf ... Это не будет работать в каждом проекте, в зависимости от настроек.
Показать ещё 2 комментария
32

Обратите внимание, что если вы не указали ревизию, вы должны включить разделитель. Пример из моей консоли:

git reset <path_to_file>
fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git reset -- <path_to_file>
Unstaged changes after reset:
M   <path_to_file>

(git версия 1.7.5.4)

  • 2
    Я попробовал git reset <path> и он прекрасно работает без разделителя. Я также использую git 1.9.0. Может быть, это не работает в старых версиях?
31

Может быть, Git развился с тех пор, как вы разместили свой вопрос.

$> git --version
git version 1.6.2.1

Теперь вы можете попробовать:

git reset HEAD .

Это должно быть то, что вы ищете.

  • 2
    Конечно, но у вас есть вопрос о том, как добавить один из двух (или более) файлов. В руководстве «git reset» упоминается, что «git reset <paths>», однако, является противоположностью «git add <paths>».
30

Чтобы удалить новые файлы из промежуточной области (и только в случае нового файла), как было предложено выше:

git rm --cached FILE

Использовать rm --cached только для случайно добавленных новых файлов.

  • 3
    Имейте в виду, что --cached - действительно важная часть здесь.
  • 0
    -1; нет, это не выводит файл из очереди, он удаляет файл (фактически не удаляя его из вашего рабочего дерева).
23

В reset каждый файл в определенной папке (и ее подпапках) вы можете использовать следующую команду:

git reset *
  • 4
    На самом деле, это не сбрасывает каждый файл, потому что * использует расширение оболочки и игнорирует точечные файлы (и точечные каталоги).
  • 0
    Вы можете запустить git status чтобы увидеть все, что осталось, и сбросить его вручную, т.е. git reset file .
22

используйте команду * для обработки нескольких файлов за раз

git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*

и т.д.

  • 2
    Имейте в виду, что * обычно не будет включать точечные файлы или 'точечные каталоги', если вы не укажете явно .* Или .*.prj
21

Просто введите git reset, он вернется назад, и это похоже на то, что вы никогда не вводили git add . с момента последнего коммита. Обязательно сделайте это раньше.

  • 1
    Не сработает, если нет последнего коммита.
  • 0
    Как это случилось, был последний коммит ... но я специально спрашивал об удалении одного файла из коммита, а не каждого файла из коммита.
17

Предположим, что я создаю новый файл newFile.txt.

Изображение 7431

Предположим, что я случайно добавляю файл, git add newFile.txt

Изображение 7432

Теперь я хочу отменить это добавление перед фиксацией git reset newFile.txt

Изображение 7433

  • 0
    Предположим, я на 1-й картинке, что означает, что я даже не сделал "git.add". Кроме того, я совсем не хочу, чтобы все это изменилось. Я имею в виду, когда я делаю git status, он не должен показывать никаких красных файлов. Я имею в виду, что он должен быть синхронизирован, как если бы не было изменено ни одного файла с момента последнего нажатия git. как этого добиться.
  • 0
    Итак, предположим, что вы только на первом шаге. И вы хотите избавиться от всех изменений, которые вы сделали, что делает «newFile.txt» красным.
Показать ещё 11 комментариев
15

Для конкретного файла:

  • git reset my_file.txt
  • git checkout my_file.txt

Для всех добавленных файлов:

  • git reset
  • Git Checkout.

Примечание: checkout изменяет код в файлах и переходит в последнее обновленное (подтвержденное) состояние. сброс не меняет коды; он просто сбрасывает заголовок.

  • 3
    Пожалуйста, объясните разницу между git reset <file> и git checkout <file> .
  • 1
    сброс не меняет файл, просто уберите его со сцены (= index, куда он был добавлен git add)
Показать ещё 2 комментария
12

Для отмены git add используйте

git reset filename

12

Я удивлен, что никто не упоминает интерактивный режим:

git add -i

выберите вариант 3 для добавления файлов. В моем случае я часто хочу добавить несколько файлов, в интерактивном режиме вы можете использовать такие цифры, чтобы добавлять файлы. Это займет всего 4: 1,2,3,5

Чтобы выбрать последовательность, просто введите 1- 5, чтобы взять все от 1 до 5.

Git промежуточных файлов

  • 0
    «Я удивлен, что никто не упомянул интерактивный режим» - так и сделали: stackoverflow.com/a/10209776/1709587
12

Эта команда изменяет ваши изменения:

git reset HEAD filename.txt

Вы также можете использовать

git add -p 

чтобы добавить части файлов.

8

git add myfile.txt # это добавит ваш файл в список, посвященный фиксации

В отличие от этой команды,

git reset HEAD myfile.txt  # this will undo it. 

Итак, вы будете в предыдущем состоянии. указанный будет снова в списке без следа (предыдущее состояние).

он будет reset головой с указанным файлом. поэтому, если ваша голова не имеет этого, это просто reset it

8
git reset filename.txt

Удалит файл с именем filename.txt из текущего индекса, область "about to be commit", не изменяя ничего.

7

В SourceTree вы можете легко сделать это через gui. Вы можете проверить, какая команда sourcetree использует, чтобы отключить файл.

Я создал новый файл и добавил его в git. Затем я отключил его, используя guit SourceTree. Это результат:

Unstaging files [08/12/15 10:43]
git -c diff. mnemonicprefix=false -c core. quotepath=false -c учетные данные. helper=sourcetree reset -q - путь /to/file/filename.java

SourceTree использует reset, чтобы отключить новые файлы.

6
git reset filename.txt  

Удалит файл с именем filename.txt из текущего индекса, область "about to be commit", не изменяя ничего.

6

Одним из наиболее интуитивных решений является использование SourceTree.

Вы можете просто перетаскивать файлы из поэтапного и неустановленного Изображение 7434

0

Команда git reset помогает вам изменить либо область подготовки, либо область подготовки и рабочее дерево. Способность Git создавать коммиты в точности так, как вы хотите, означает, что вам иногда нужно отменить изменения, внесенные вами с помощью git add. Вы можете сделать это, вызвав git reset HEAD. У вас есть два варианта, чтобы полностью избавиться от изменений. git checkout HEAD - это быстрый способ отменить изменения в вашей области подготовки и рабочем дереве. Будьте осторожны с этой командой, потому что она удаляет все изменения в вашем рабочем дереве. Git не знает об этих изменениях, так как они никогда не совершались. Невозможно вернуть эти изменения после запуска этой команды. Другая команда в вашем распоряжении - это git reset --hard. Это в равной степени разрушительно для вашего рабочего дерева - любые незафиксированные изменения или поэтапные изменения теряются после его запуска. Запуск git reset -hard HEAD делает то же самое, что и git checkout HEAD. он просто не требует файла или пути для работы. Вы можете использовать --soft с git reset. Он сбрасывает репозиторий в указанный вами коммит и выполняет все эти изменения. На любые изменения, которые вы уже подготовили, это не влияет, равно как и изменения в вашем рабочем дереве. Наконец, вы можете использовать --mixed для сброса рабочего дерева без внесения каких-либо изменений. Это также не выполняет этапные изменения.

-6
git stash && git stash pop

Будет стирать сцену.

-9

Команда git reset --hard HEAD должна работать. Следует отметить, что вам нужно изменить каталог (cd) обратно в обычный рабочий каталог. В противном случае, если вы запустите команду из каталога, вы ошибочно сделали git add ..... вы не сможете вернуться и вместо этого получить ошибки, упомянутые в других сообщениях, в отношении "неизвестной версии или пути не в рабочем дереве".

  • 25
    ВНИМАНИЕ: это не просто удалит файлы из вашего индекса, но и полностью удалит их изменения из вашей рабочей копии! Я бы не советовал кому-либо использовать аппаратный сброс только для удаления файлов ... если только они не поклонники полной потери своей работы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню