Git отменить все незафиксированные или несохраненные изменения

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

Ответ 1

  • Это приведет к удалению всех файлов, которые вы могли создать с помощью git add:

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

    git checkout .
    

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

    git checkout [some_dir|file.txt]
    

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

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

    git clean -fdx
    

    ВНИМАНИЕ: -x также удалит все пропущенные файлы, в том числе указанные .gitignore ! Вы можете использовать -n для предварительного просмотра файлов, которые будут удалены.


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

git reset
git checkout .
git clean -fdx

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

Ответ 2

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

git stash
git stash drop

Если у вас есть необработанные файлы (проверьте, запустив git status), их можно удалить, выполнив:

git clean -fdx

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

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

Каждый штамп назван в честь предыдущей комманды commit.

Ответ 3

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

more информация о блокировке

Ответ 4

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

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

введите описание изображения здесь 2) выберите все неустановленные файлы (команда + a), щелкните правой кнопкой мыши и выберите удаление

введите описание изображения здесь

Это просто: D

Ответ 5

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

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

Ответ 6

Государства, переходящие с одного коммита на новый коммит

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"

Проверьте разницу

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

Ответ 7

Что я делаю

git add . (adding everything)
git stash 
git stash drop

Один лайнер: git add. && git stash && git stash drop git add. && git stash && git stash drop