Як видалити всі зміни з робочого каталогу, включаючи нові незатребувані файли. Я знаю, що 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 -f
git 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