Подтвердить что ты не робот

Git revert --no-commit без постановки

Обычно команда git revert автоматически создает некоторые коммиты с сообщениями журнала фиксации, в которых указано, какие коммиты были возвращены.

Чтобы избежать автоматической фиксации, выберите опцию -n (или --no-commit).

Но после этой команды восстановленные файлы находятся в поэтапной области. Я могу отключить их, используя команду git reset HEAD.

Есть ли прямой способ отменить фиксацию без фиксации и постановки?

Другими словами: существует ли прямая команда для отмены фиксации, применяющей изменения только к рабочему каталогу, не касаясь индекса?

4b9b3361

Ответ 1

Для этого нет единой команды. Как вы уже отметили, вы можете объединить git revert -n с git reset, чтобы получить отмену в индексе.

Помимо этого метода вы можете использовать git apply -R для "обратного применения" патча, и вы можете включить фиксацию в патч с помощью git show, поэтому:

$ git show <rev> | git apply -R

имеет тот же эффект, с одной важной (но тонкой) разницей. Позвольте мне процитировать из документации git revert и добавить свой собственный акцент:

-n, --no-commit
 Обычно команда автоматически создает некоторые коммиты с фиксацией  сообщения журнала, в которых указано, какие фиксации были возвращены. Этот флаг применяется  изменения, необходимые для возврата названных коммитов к вашей рабочей  дерево и индекс, но не совершает коммиты. К тому же,  когда этот параметр используется, ваш индекс не должен соответствовать  ГОЛОВА. Возврат выполняется в соответствии с начальным состоянием вашего  индекс.

Другими словами, git revert -n работает в и из индекса с побочным эффектом обновления вашего дерева работ. Команда git apply работает (по умолчанию в любом случае) только на рабочем дереве и фактически может использоваться вне репозитория git.