Как мне отменить неустановленные изменения в Git?
2292891 просмотра
30 ответа
Как отменить изменения в моей рабочей копии, которых нет в индексе?
Автор: Readonly Источник Размещён: 03.07.2019 03:43Ответы (30)
2435 плюса
Другой более быстрый способ:
git stash save --keep-index --include-untracked
Вам не нужно включать, --include-untracked
если вы не хотите быть тщательным об этом.
После этого вы можете сбросить этот тайник с помощью git stash drop
команды, если хотите.
4775 плюса
Для всех неподготовленных файлов в текущем рабочем каталоге используйте:
git checkout -- .
Для конкретного файла используйте:
git checkout -- path/to/file/to/revert
--
здесь, чтобы удалить аргумент неоднозначности .
1760 плюса
Похоже, полное решение:
git clean -df
git checkout -- .
git clean
удаляет все неотслеживаемые файлы ( предупреждение : хотя он не удаляет проигнорированные файлы, упомянутые непосредственно в .gitignore, он может удалять игнорируемые файлы, находящиеся в папках ) и git checkout
удаляет все неотмеченные изменения.
306 плюса
Это проверяет текущий индекс для текущего каталога, отбрасывая все изменения в файлах из текущего каталога вниз.
git checkout .
или этот, который проверяет все файлы из индекса, перезаписывая файлы рабочего дерева.
git checkout-index -a -f
Автор: CB Bailey
Размещён: 20.06.2009 10:28
230 плюса
git clean -df
Очищает рабочее дерево путем рекурсивного удаления файлов, которые не находятся под контролем версий, начиная с текущего каталога.
-d
: Удаление неотслеживаемых каталогов в дополнение к неотслеживаемым файлам
-f
: Сила (может не требоваться в зависимости от clean.requireForce
настроек)
Запустите, git help clean
чтобы увидеть руководство
95 плюса
Мой любимый
git checkout -p
Это позволяет вам выборочно возвращать фрагменты.
Смотрите также:
git add -p
Автор: Ben
Размещён: 10.10.2014 12:31
84 плюса
Поскольку ни один ответ не предлагает точную комбинацию опций, которую я использую, вот она:
git clean -dfx
git checkout .
Это текст интерактивной справки для используемых git clean
опций:
-d
Удалите неотслеживаемые каталоги в дополнение к неотслеживаемым файлам. Если неотслеживаемый каталог управляется другим Git-репозиторием, по умолчанию он не удаляется. Используйте -f
опцию дважды, если вы действительно хотите удалить такой каталог.
-f
Если переменная конфигурации Git clean.requireForce
не установлен false
, Git чистый откажет удалять файлы или каталоги , если не дано -f
, -n
или -i
. Git откажется от удаления каталогов в .git
подкаталоге или файле, если -f
не дается секунда .
-x
Не используйте правила игнорирования из .gitignore
(для каждого каталога) и $GIT_DIR/info/exclude
, но все же используйте правила игнорирования, заданные с -e
параметрами. Это позволяет удалить все неотслеживаемые файлы, включая продукты сборки. Это может быть использовано (возможно, в сочетании с git reset
) для создания первичного рабочего каталога для тестирования чистой сборки.
Также git checkout .
необходимо сделать в корне репо.
58 плюса
Я действительно нашел эту статью полезной для объяснения, когда использовать какую команду: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/
Есть пара разных случаев:
Если вы не поставили файл, то вы используете
git checkout
. Оформить заказ "обновляет файлы в рабочем дереве в соответствии с версией в индексе". Если файлы не были размещены (или добавлены в индекс) ... эта команда по существу вернет файлы к тому, что было вашим последним коммитом.git checkout -- foo.txt
Если вы поставили файл, используйте git reset. Сброс изменяет индекс в соответствии с коммитом.
git reset -- foo.txt
Я подозреваю, что использование git stash
является популярным выбором, так как это немного менее опасно. Вы всегда можете вернуться к нему, если случайно унесете слишком много, используя Git Reset. Сброс является рекурсивным по умолчанию.
Посмотрите на статью выше для дальнейших советов.
Автор: blak3r Размещён: 13.08.2012 09:3151 плюса
Самый простой способ сделать это с помощью этой команды:
Эта команда используется для отмены изменений в рабочем каталоге -
git checkout -- .
https://git-scm.com/docs/git-checkout
В команде git сохранение неотслеживаемых файлов достигается с помощью:
git stash -u
http://git-scm.com/docs/git-stash
Автор: A H M Forhadul Islam Размещён: 12.04.2017 09:2749 плюса
Если вы просто хотите удалить изменения в существующих файлах , используйте checkout
( документировано здесь ).
git checkout -- .
- Ветвь не указана, поэтому она проверяет текущую ветку.
- Двойной дефис (
--
) сообщает Git, что последующее должно быть принято в качестве второго аргумента (пути), что вы пропустили спецификацию ветви. - Точка (
.
) указывает все пути.
Если вы хотите удалить файлы, добавленные с момента вашей последней фиксации, используйте clean
( задокументировано здесь ):
git clean -i
-i
Вариант инициирует интерактивныйclean
, для предотвращения ошибочных удалений.- Несколько других опций доступны для более быстрого выполнения; см. документацию
Если вы хотите переместить изменения в область хранения для последующего доступа , используйте stash
( задокументировано здесь ):
git stash
- Все изменения будут перенесены в Git's Stash для последующего доступа.
- Несколько вариантов доступны для более детального хранения; см. документацию
44 плюса
Если вы не заинтересованы в сохранении неизмененных изменений (особенно, если внесенные изменения представляют собой новые файлы), я нашел это удобным:
git diff | git apply --reverse
Автор: Joshua Kunzmann
Размещён: 28.07.2011 05:27
42 плюса
По мере ввода состояния git (используйте «git checkout - ...» для отмены изменений в рабочем каталоге) .
например git checkout -- .
41 плюса
git checkout -f
man git-checkout
:
-f, --force
При переключении веток продолжайте работу, даже если индекс или рабочее дерево отличается от HEAD. Это используется, чтобы выбросить локальные изменения.
При проверке путей из индекса не допускайте сбоев при незакрытых записях; вместо этого необработанные записи игнорируются.
Автор: Bijan Размещён: 17.05.2014 02:2836 плюса
Вы можете использовать git stash - если что-то пойдет не так, вы все равно сможете вернуться из stash. Подобный некоторому другому ответу здесь, но этот также удаляет все неустановленные файлы, а также все немаркированные удаляет:
git add .
git stash
если вы проверите, что все в порядке, выбросьте тайник:
git stash drop
Ответ от Bilal Maqsood git clean
также сработал для меня, но с тайником у меня больше контроля - если я делаю что-то случайно, я все равно могу вернуть свои изменения
ОБНОВИТЬ
Я думаю, что есть еще 1 изменение (не знаю, почему это работало для меня раньше):
git add . -A
вместо git add .
без -A
удаленных файлов не будут поставлены
33 плюса
Вместо того, чтобы отменить изменения, я перенастроил свой пульт на источник. Обратите внимание - этот метод предназначен для полного восстановления вашей папки в папку репо.
Так что я делаю это, чтобы убедиться, что они не сидят там, когда я сбрасываю git (позже - исключая gitignores для Origin / branchname)
ПРИМЕЧАНИЕ. Если вы хотите, чтобы файлы еще не отслеживались, но не в GITIGNORE, вы можете пропустить этот шаг, так как он будет стирать эти неотслеживаемые файлы, не найденные в вашем удаленном хранилище (спасибо @XtrmJosh).
git add --all
Затем я
git fetch --all
Потом я сбрасываю на источник
git reset --hard origin/branchname
Это вернет его на круги своя. Точно так же, как повторное клонирование ветки, пока все мои gitignored файлы хранятся локально и на месте.
Обновлен для каждого комментария пользователя ниже: изменение, чтобы сбросить текущую ветвь пользователя.
git reset --hard @{u}
Автор: Nick
Размещён: 07.08.2015 09:15
28 плюса
Перепробовал все вышеперечисленные решения, но так и не смог избавиться от новых, неподготовленных файлов.
Используйте, git clean -f
чтобы удалить эти новые файлы - с осторожностью! Обратите внимание на параметр силы.
21 плюса
просто скажи
git stash
Это удалит все ваши локальные изменения. Вы также можете использовать позже, сказав
git stash apply
или Git Stash поп
Автор: piyushmandovra Размещён: 24.04.2015 12:1921 плюса
Просто используйте:
git stash -u
Готово. Легко.
Если вы действительно заботитесь о своем стековом стеке, тогда вы можете следовать с ним git stash drop
. Но в этот момент вам лучше использовать (от Мариуша Новака):
git checkout -- .
git clean -df
Тем не менее, мне нравится git stash -u
больше всего, потому что он «отбрасывает» все отслеженные и неотслеживаемые изменения всего одной командой . Тем не менее , git checkout -- .
только отбрасывает отслеживаются изменения, и git clean -df
отбрасывает только неотслеживаемые изменения ... и вводить обе команды это далеко слишком много работы :)
16 плюса
Это работает даже в каталогах, которые есть; за пределами нормальных разрешений git.
sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx
Случилось со мной недавно
Автор: GlassGhost Размещён: 05.09.2013 09:3814 плюса
cd path_to_project_folder # take you to your project folder/working directory
git checkout . # removes all unstaged changes in working directory
Автор: vivekporwal04
Размещён: 30.05.2014 09:26
11 плюса
Независимо от того, в каком состоянии находится ваш репо, вы всегда можете вернуться к любой предыдущей фиксации:
git reset --hard <commit hash>
Это отменит все изменения, которые были сделаны после этого коммита.
Автор: msangel Размещён: 05.02.2016 12:5910 плюса
Другой способ избавиться от новых файлов, который более специфичен, чем git clean -df (это позволит вам избавиться от некоторых файлов, не обязательно всех), - сначала добавить новые файлы в индекс, затем спрятать, а затем удалить копить.
Этот метод полезен, когда по какой-то причине вы не можете легко удалить все неотслеживаемые файлы каким-либо обычным механизмом (например, rm).
Автор: tjb Размещён: 15.06.2012 08:5510 плюса
По моему мнению,
git clean -df
должен сделать свое дело. Согласно документации Git по git clean
git-clean - удаляет неотслеживаемые файлы из рабочего дерева
Описание
Очищает рабочее дерево путем рекурсивного удаления файлов, которые не находятся под контролем версий, начиная с текущего каталога.
Обычно удаляются только файлы, неизвестные Git, но если указана опция -x, игнорируемые файлы также удаляются. Это может быть полезно, например, для удаления всех продуктов сборки.
Если заданы необязательные аргументы ..., затрагиваются только эти пути.
Опции
Автор: Lahiru Размещён: 14.07.2016 07:03-d Удалить неотслеживаемые каталоги в дополнение к неотслеживаемым файлам. Если неотслеживаемый каталог управляется другим Git-репозиторием, по умолчанию он не удаляется. Используйте параметр -f дважды, если вы действительно хотите удалить такой каталог.
-f --force Если для переменной конфигурации Git clean.requireForce не задано значение false, git clean не будет запускаться, если не указано -f, -n или -i.
9 плюса
То, что следует, действительно является только решением, если вы работаете с форком репозитория, где вы регулярно синхронизируете (например, запрос на извлечение) с другим репо. Краткий ответ: удалите fork и refork, но прочитайте предупреждения на github .
У меня была похожая проблема, возможно, не идентичная, и мне грустно говорить, что мое решение не идеально, но в конечном итоге оно эффективно.
У меня часто бывали такие сообщения о состоянии git (по крайней мере, 2/4 файла):
$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
# modified: doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
# modified: doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats
Зоркий глаз заметит, что в этих файлах есть допплангеры, которые в случае отключения - это одна буква. Каким-то образом, и я понятия не имею, с чего начался этот путь (поскольку я сам не работал с этими файлами из репозитория верхнего уровня), я переключил эти файлы. Попробуйте множество решений, перечисленных на этой странице (и других страницах), похоже, не помогло.
Я смог решить эту проблему, удалив свой разветвленный репозиторий и все локальные репозитории, а затем повторив его. Одного этого было недостаточно; апстрим должен был переименовать файлы в новые имена файлов. До тех пор, пока у вас не будет никакой беспристрастной работы, нет вики и нет проблем, которые расходятся с вышестоящим хранилищем, у вас все будет в порядке. Upstream может быть не очень доволен вами, если не сказать больше. Что касается моей проблемы, то это, несомненно, ошибка пользователя, так как я не настолько опытен в git, но факт, что исправить проблему с git также далеко не просто.
Автор: bbarker Размещён: 05.01.2014 04:537 плюса
Когда вы хотите передать тайник кому-то еще:
# add files
git add .
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff
[отредактируйте] как прокомментировано, можно назвать тайники. Ну, используйте это, если вы хотите поделиться своим тайником;)
Автор: twicejr Размещён: 08.07.2013 03:077 плюса
Вы можете создать свой собственный псевдоним, который описывает, как сделать это в описательной форме.
Я использую следующий псевдоним, чтобы отменить изменения.
Отменить изменения в (списке) файлах в рабочем дереве
discard = checkout --
Затем вы можете использовать его как следующий, чтобы отменить все изменения:
discard .
Или просто файл:
discard filename
В противном случае, если вы хотите отменить все изменения, а также неотслеживаемые файлы, я использую сочетание checkout и clean:
Очистить и отменить изменения и неотслеживаемые файлы в рабочем дереве
cleanout = !git clean -df && git checkout -- .
Таким образом, использование просто как следующее:
cleanout
Теперь доступно в следующем репозитории Github, который содержит много псевдонимов:
Автор: Pau Размещён: 05.06.2017 04:446 плюса
Если все подготовленные файлы были фактически зафиксированы, то ветку можно просто сбросить, например, из графического интерфейса пользователя примерно за три щелчка мышью: Ветвь , Сброс , Да !
Поэтому на практике я часто обращаюсь к нежелательным локальным изменениям, чтобы зафиксировать все хорошие вещи, а затем сбросить ветку.
Если хороший материал фиксируется в одном коммите, то вы можете использовать «изменить последний коммит», чтобы вернуть его к постановке или неостановке, если вы в конечном итоге захотите сделать это немного иначе.
Это может быть не техническое решение, которое вы ищете для вашей проблемы, но я считаю это очень практичным решением. Это позволяет вам выборочно отказаться от внесенных изменений, сбрасывать изменения, которые вам не нравятся, и сохранять те, которые вы делаете.
Итак, в заключение, я просто делаю коммит , сбрасываю ветку и исправляю последний коммит .
Автор: Ivan Размещён: 20.03.2015 03:386 плюса
Если у вас субмодуль и другие решения не работают, попробуйте:
Чтобы проверить, в чем проблема (возможно, «грязный» случай), используйте:
git diff
Убрать заначку
git submodule update
6 плюса
У меня была странная ситуация, когда файл всегда был неподготовленным, это помогает мне решить проблему.
Автор: SDV Размещён: 08.02.2017 11:58git rm .gitattributes
git add -A
git reset --hard
6 плюса
Если почти невозможно исключить изменения файлов, вы рассматривали возможность их игнорирования? Если это утверждение верно и вы не трогали эти файлы во время разработки, эта команда может быть полезна:
git update-index --assume-unchanged file_to_ignore
Вопросы из категории :
- git Как я могу отменить git reset --hard HEAD ~ 1?
- git Как настроить Git голый доступный по HTTP репозиторий на IIS
- git Как мне отменить неустановленные изменения в Git?
- git Как удалить локальные (неотслеживаемые) файлы из текущего рабочего дерева Git?
- git Как клонировать все удаленные ветки в Git?
- git Частичные коммиты с Subversion
- git Как перенести репозиторий SVN с историей в новый репозиторий Git?
- git Как восстановить сброшенный тайник в Git?
- git Как я могу добавить пустой каталог в Git-репозиторий?
- git Как вытащить из Git-репозитория через HTTP-прокси?
- version-control Как мне создать ветку?
- version-control Межотраслевое слияние в TFS?
- version-control Would all ally would wouldyy wouldy wouldy would ally would would wouldyyy would wouldy would wouldy would wouldyyyyy would would ally would would wouldyyyyyyyyyy wouldyy would wouldyyy wouldy would would would ally would ally would ally all all all
- version-control Лучший способ выполнения контроля версий для MS Excel
- version-control VisualSVN и библиотеки классов не в корне рабочей копии
- version-control Как просмотреть git-pull без выполнения fetch?