Git отменить все незафиксированные или несохраненные изменения

Я пытаюсь отменить все изменения с момента последнего коммита. Я пробовал git reset --hard и git reset --hard HEAD после просмотра этого сообщения. Я отвечаю, что голова теперь в 18c3773... но когда я смотрю на свой локальный источник, все файлы все еще там. Что мне не хватает?

419
задан Antarr Byrd 28 дек. '12 в 23:46
источник поделиться
6 ответов
  • Это приведет к отключению всех файлов, которые вы могли бы поставить с помощью git add:

    git reset
    
  • Это приведет к возврату всех локальных незафиксированных изменений (должно выполняться в корне репо):

    git checkout .
    

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

    git checkout [some_dir|file.txt]
    

    Еще один способ отменить все незафиксированные изменения (дольше, чем тип, но работает из любого подкаталога):

    git reset --hard HEAD
    
  • Это приведет к удалению всех локальных невоспроизводимых файлов, поэтому остаются только git отслеживаемые файлы:

    git clean -fdx
    

    ПРЕДУПРЕЖДЕНИЕ: -x также удалит все проигнорированные файлы!


Подводя итог: выполнение приведенных ниже команд в основном эквивалентно свежей git clone из исходного источника (но он не перезагружает все, что намного быстрее):

git reset
git checkout .
git clean -fdx

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

856
ответ дан mvp 29 дек. '12 в 0:04
источник поделиться

Если вы хотите " отменить", все незафиксированные изменения просто запускаются:

git stash
git stash drop

Если у вас есть необработанные файлы (проверьте, запустив git status), их можно удалить, выполнив:

git clean -fdx

git stash создает новый stash, который станет stash @{0}. Если вы хотите сначала проверить, вы можете запустить git stash list, чтобы просмотреть список ваших штампов. Он будет выглядеть примерно так:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

Каждый штамп назван в честь предыдущей комманды commit.

71
ответ дан Abram 18 июля '14 в 23:59
источник поделиться

существует также git stash - который "застревает" ваши локальные изменения и может быть повторно применен позднее или сброшен, если больше не требуется

more информация о блокировке

14
ответ дан keshav 29 дек. '12 в 0:17
источник поделиться

Я использую исходное дерево.... Вы можете сделать все незафиксированные изменения с помощью двух простых шагов:

1) просто нужно reset статус файла рабочей области

введите описание изображения здесь 2) выберите все неустановленные файлы (команда + a), щелкните правой кнопкой мыши и выберите удаление

введите описание изображения здесь

Это просто: D

9
ответ дан user1872384 14 июля '16 в 20:19
источник поделиться

Для тех, кто пришел сюда, если они могут отменить git clean -f -d, с помощью которого был удален файл, созданный в eclipse,

Вы можете сделать то же самое из пользовательского интерфейса, используя "восстановление из локальной истории" для ссылки: Восстановить из локальной истории

3
ответ дан Abdul Rahman K 28 авг. '15 в 12:31
источник поделиться

Основываясь на моих исследованиях, я получил ниже резюме.

СОСТОЯНИЕ ПЕРЕХОДА ИЗ ОДНОГО КОМИТЕТА НА НОВЫЙ КОМИТЕТ

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

ДЕЙСТВИЯ ДЛЯ ГОСУДАРСТВЕННОГО ПЕРЕХОДА:

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

ПРОВЕРИТЬ ДИФФ:

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

ОТКРОЙТЕ ПОСЛЕДНИЙ КОМИТЕТ:

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

ЭКВИВАЛЕНТ GIT КЛОН, БЕЗ ЗАГРУЗКИ НИЧЕГО

git reset; git checkout .; git clean -fdx
0
ответ дан Zii 01 июля '16 в 11:54
источник поделиться

Другие вопросы по меткам