Сбросить все изменения после последнего коммита в git

324

Как я могу отменить все изменения, внесенные в мой каталог после последней фиксации, включая удаление добавленных файлов, сброс измененных файлов и добавление обратно удаленных файлов?

Dogbert
источник
возможный дубликат возврата к предыдущему
коммиту
8
@nawfal может быть дубликатом, но «сброс всех изменений после последней фиксации» соответствует большему количеству критериев поиска (слов, найденных в google), чем соответствующему «как отменить репозиторий git». По крайней мере, для таких людей, как я, у которых английский не является родным языком: d
Шириш Хервейд,

Ответы:

561

Сначала сбросьте изменения

git reset HEAD --hard

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

git clean -fd
Бенджамин Банье
источник
7
@ Adam: иногда вы можете также захотеть эту -xопцию git clean, которая также направляет ее на удаление игнорируемых файлов.
Каскабель
31
Если вы хотите сохранить файлы, которые не отслеживаются из-за .gitignore, будьте осторожны с git clean -fdкомандой.
bitsoflogic
3
@Levinaris: наоборот git clean -fd, не будут удалять игнорируемые файлы. -xволя.
Роберт Симер
5
@RobertSiemer На самом деле, это возможно! Если у вас есть какие-либо папки, состоящие полностью из игнорируемых файлов, они будут удалены из этих папок, удаляя игнорируемые файлы. Рассмотрим файл .gitignore, подобный приведенному здесь: stackoverflow.com/q/25554504/456645 . В этом примере предположим, что в некоторых папках нет файлов PHP. git clean -fdудалит эти папки и неотслеживаемые файлы. Протестировано с версией git 1.9.1
bitsoflogic
3
но зачем вообще нужна вторая «очистка»?
Шириш Хервейд,
71

Как я могу отменить все изменения, внесенные в мой каталог после последней фиксации, включая удаление добавленных файлов, сброс измененных файлов и добавление обратно удаленных файлов?

  1. Вы можете отменить изменения в отслеживаемых файлах с помощью:

    git reset HEAD --hard
    
  2. Вы можете удалить неотслеживаемые файлы с помощью:

    git clean -f
    
  3. Вы можете удалить неотслеживаемые файлы и каталоги с помощью:

    git clean -fd
    

    но вы не можете отменить переход на неотслеживаемые файлы .

  4. Вы можете удалить игнорируемые и неотслеживаемые файлы и каталоги

    git clean -fdx
    

    но вы не можете отменить переход на игнорируемые файлы .

Вы можете также установить clean.requireForceна false:

git config --global --add clean.requireForce false

избегать использования -f( --force) при использовании git clean.

Ортомала Локни
источник
2
Круто, как раз то, что мне было нужно. Спасибо за сравнение всех соответствующих команд!
Marquee
-1

Есть две команды, которые будут работать в этой ситуации,

root> git reset --hard HEAD ~ 1

root> git push -f

Для большего количества команд git обратитесь к этой странице

RKS
источник
1
git push -fне имеет отношения к вопросу и, в этом случае, опасно
mustache1up