Предположим, у вас есть этот сценарий, в котором вы прячете свои изменения, чтобы вытащить из источника. Возможно, потому что ваши локальные изменения просто debug: true
в некоторых файлах настроек. Теперь вы тянете, и кто-то ввел там новую настройку, создающую конфликт.
git status
говорит:
# On branch master
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: src/js/globals.tpl.js
no changes added to commit (use "git add" and/or "git commit -a")
Хорошо. Я решил пойти с тем, что предложил Git: я решил конфликт и совершил:
vim src/js/globals.tpl.js
# type type type …
git commit -a -m WIP # (short for "work in progress")
Теперь моя рабочая копия находится в том состоянии, в котором я хочу, но я создал коммит, который мне не нужен. Как мне избавиться от этого коммита без изменения моей рабочей копии? Подождите, есть популярная команда для этого!
git reset HEAD^
Моя рабочая копия не была изменена, но фиксация WIP пропала. Это именно то, что я хотел! (Обратите внимание, что я не использую --soft
здесь, потому что если в вашем хранилище есть автоматически объединенные файлы, они автоматически размещаются, и, таким образом, вы получите эти файлы снова после reset
.)
Но есть еще одна вещь: справочная страница для git stash pop
напоминает нам, что "Применение состояния может привести к сбою при конфликтах; в этом случае оно не удаляется из списка хранения. Вам необходимо разрешить конфликтует вручную и впоследствии вызывает git stash drop
. " Так что именно это мы и делаем сейчас:
git stash drop
И готово.