Скиньте всі зміни після останнього вчинення в git


324

Як я можу скасувати всі зміни, внесені до мого каталогу після останнього фіксації, включаючи видалення доданих файлів, скидання змінених файлів та додавання назад видалених файлів?


можливий дублікат
Повернення

8
@nawfal може бути дублікатом, але "скинути всі зміни після останньої фіксації" відповідає більше критеріям пошуку (слова, шукані в google), ніж відповіді "як повернути сховище git". Принаймні для таких людей, як я, які не мають англійською мовою рідною мовою: d
Shirish Herwade

Відповіді:


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
але чому взагалі потрібне друге «очищення»?
Shirish Herwade

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 - тверда голова ~ 1

корінь> git push -f

Більше команд git див. На цій сторінці


1
git push -fне пов'язане з питанням і, в цьому сценарії, небезпечно
вуса
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.