ГИТ отменить все несохраненные или несохраненные изменения

Я пытаюсь отменить все изменения с момента моего последнего коммита. Я пытался!--0--> и git reset --hard HEAD после просмотра этот пост. Я отвечаю, что голова сейчас в 18c3773... но когда я смотрю на свой локальный источник, все файлы все еще там. Что я упускаю?

6 ответов


  • это будет unstage все файлы, которые вы могли бы поставить с git add:

    git reset
    
  • это вернет все локальные незафиксированные изменения (должны быть выполнены в корне РЕПО):

    git checkout .
    

    вы также можете вернуть незафиксированные изменения только в определенный файл или каталог:

    git checkout [some_dir|file.txt]
    

    еще один способ вернуть все незафиксированные изменения (дольше для типа, но работает с любого подкаталог):

    git reset --hard HEAD
    
  • это удалит все локальные неотслеженные файлы, поэтому только git отслеживаются файлы остаются:

    git clean -fdx
    

    предупреждение: -x также удалит все проигнорированные файлы, включая те, которые указаны .gitignore! Вы можете использовать -n для предварительного просмотра удаляемых файлов.


подводя итог: выполнение команд ниже в основном эквивалентно fresh git clone от исходный код (но он ничего не скачивает, поэтому намного быстрее):

git reset
git checkout .
git clean -fdx

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


если вы хотите "отменить" все незафиксированные изменения, просто запустите:

git stash
git stash drop

если у вас есть неотслеживаемый файлы (проверить, работает git status), Они могут быть удалены с помощью команды:

git clean -fdx

git stash создает новый тайник, который станет тайник@{0}. Если вы хотите сначала проверить, вы можете запустить git stash list чтобы увидеть список ваших заначек. Это будет выглядеть примерно так:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

каждый тайник назван после предыдущего коммита messsage.


появилась git stash - который "прячет" ваши локальные изменения и может быть применен позже или удален, если больше не требуется

больше информация о stashing


Я использую исходное дерево.... Вы можете отменить все незафиксированные изменения с помощью 2 простых шагов:

1) просто нужно сбросить статус файла рабочей области

enter image description here 2) Выберите все файлы unstage (command +a), щелкните правой кнопкой мыши и выберите Удалить

enter image description here

Это так просто: D


для тех, кто достиг здесь ищет, если они могут отменить git clean -f -d , в которой файл создан в затмение удалено,

вы можете сделать то же самое из пользовательского интерфейса, используя "восстановить из локальной истории" для ref: Восстановить из локальной истории


состояния, переходящие от одной фиксации к новой фиксации

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

действие для перехода состояния

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

проверить diff

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

вернуться к последней фиксации

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

эквивалент git clone, без повторной загрузки ничего

git reset; git checkout .; git clean -fdx