Як видалити всі зміни з робочого каталогу, включаючи нові незатребувані файли. Я знаю, що git checkout -fце робить, але це не видаляє нові незатребувані файли, створені з моменту останньої фіксації.
Хтось має ідею, як це зробити?
Як видалити всі зміни з робочого каталогу, включаючи нові незатребувані файли. Я знаю, що git checkout -fце робить, але це не видаляє нові незатребувані файли, створені з моменту останньої фіксації.
Хтось має ідею, як це зробити?
Відповіді:
git reset --hard # removes staged and working directory changes
## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)
Щоб побачити, що буде видалено попередньо, не фактично видаляючи його, використовуйте -nпрапор (це в основному тестовий запуск). Коли ви готові фактично видалити, тоді видаліть -nпрапор:
git clean -nfd
git clean -fxdнасправді може бути дійсно небезпечним, якщо ви не знаєте, що робите. Ви можете назавжди видалити деякі дуже важливі відслідковувані файли, наприклад, вашу базу даних тощо. Будьте обережні.
git clean -f -dфайли також видаляються з ігнорованих папок. Тож усі ваші локальні журнали та подібні речі не зникнуть. Зазвичай це не велика проблема, але краще знати.
Найбезпечніший метод, який я часто використовую:
git clean -fd
Пояснення синтаксису на /docs/git-cleanсторінці:
-f(псевдонім:) --force. Якщо для змінної конфігурації Git clean.requireForce не встановлено значення false, git clean відмовиться видаляти файли або каталоги, якщо не вказано -f, -n або -i. Git відмовиться видаляти каталоги з .git підкаталога або файлу, якщо не буде вказано другу -f.-d. Видаліть незатрековані каталоги на додаток до файлів, що не відслідковуються. Якщо каталог без відстеження керується іншим сховищем Git, він не видаляється за замовчуванням. Використовуйте параметр -f двічі, якщо ви дійсно хочете видалити такий каталог.Як згадувалося в коментарях, можливо, бажано робити операцію, git clean -ndяка виконує сухий запуск, і розповість, що було б видалено, перш ніж його фактично видалити.
Посилання на git cleanсторінку документа:
https://git-scm.com/docs/git-clean
git clean -nd .перед тим, як фактично видаляти файли, використовуючиgit clean -fd .
add -A+ commit -a+ revert headспочатку раніше git clean. Перегляд кожного видалення просто не підходить для основних сценаріїв. Крім того, сухий біг не є срібною кулею: що робити, якщо ви щось пропустили або помилилися під час огляду?
Для всіх нестандартних файлів використовуйте:
git checkout -- .
В .кінці важливо.
Ви можете замінити .ім'я підкаталогу, щоб очистити лише певний підкаталог вашого проекту. Проблема розглядається саме тут .
src/app/work/filename.jsі ../app/working/test/filename.js. Просто за git checkout -- .допомогою гілки вилучив лише перший файл ( без ведучого ../ ). Тому мені довелося перейти cd ../в другий каталог місцеположення, щоб видалити другий файл за допомогою цієї команди.
Погляньте на git cleanкоманду.
git-clean - Видаліть неробочені файли з робочого дерева
Очищає робоче дерево, рекурсивно видаляючи файли, які не перебувають під контролем версій, починаючи з поточного каталогу.
Зазвичай видаляються лише файли, невідомі для git, але якщо вказано параметр -x, ігноровані файли також видаляються. Наприклад, це може бути корисно для видалення всіх будівельних виробів.
git clean -iі вибрав "очистити" з меню - це остаточно видалило нові файли.
Наступні роботи:
git add -A .
git stash
git stash drop stash@{0}
Зауважте, що це скасує нестаціонарні та поетапні локальні зміни. Отже, перед тим, як виконати ці команди, вам слід зробити все, що ви хочете зберегти.
Типовий випадок використання: ви перемістили багато файлів чи каталогів, а потім хочете повернутися до початкового стану.
git stash drop?
git add -A .). Я втратив 30 м, тому що файлу не було. Дякую!
Це можна зробити в два етапи:
git checkout -fgit clean -fdЯ думав , що це було ( попередження: наступний буде знищити все )
$ git reset --hard HEAD
$ git clean -fd
Зміни resetдля скасування змін. clean, Щоб видалити будь-який неотслежіваемих F Ільзе і г irectories.
git pullпісля цього: CONFLICT (content): Merge conflict in...я вирішив це лише черезgit pull --strategy=ours
git reset --hard origin/{branchName}
Це видалить усі незафіксовані файли.
git clean -iспочатку покаже вам елементи, які потрібно видалити, і продовжуватиметься після підтвердження. Я вважаю це корисним при роботі з важливими файлами, які не слід видаляти випадково.
Див. Для git help cleanотримання додаткової інформації, включаючи деякі інші корисні варіанти.
Якщо ви хочете відмовитись від усіх змін, ви можете використовувати будь-який із дійсних параметрів у псевдонімі в .gitconfig. Наприклад:
[alias]
discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"
Використання: git discard
Альтернативне рішення - здійснити зміни, а потім позбутися цих зобов'язань. Спочатку це не має негайної вигоди, але це відкриває можливість робити фішки і створювати тег git для резервного копіювання.
Ви можете це зробити на поточній гілці, наприклад:
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git revert HEAD
git reset HEAD^^
Або ви можете зробити це на відокремленій голові. (якщо припустити, що ви починаєте з відділення BRANCHNAME):
git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git checkout BRANCHNAME
Однак те, що я зазвичай роблю, - це робити фішки, а потім називати деякі чи всі зобов’язання як "Відхилити: ...". Потім використовуйте інтерактивну базу даних, щоб видалити погані зобов'язання та зберегти хороші.
git add -p # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id) # rebase on the commit id before the changes.
# Remove the commits that say "DISCARD".
Це більш багатослівно, але дозволяє переглянути, які саме зміни потрібно відмовити.
Ці git lolтаgit lola ярлики були дуже корисні з цим робочим процесом.
Для конкретної папки я використав:
git checkout -- FolderToClean/*
Це, мабуть, відповідь noob, але: я використовую TortoiseGit для Windows, і він має гарну функцію під назвою REVERT. Отже, що потрібно зробити, щоб відновити локальні нестандартні незапущені зміни:
git help resetіgit help clean