Как переместить фиксацию в промежуточную область в git?

154

Если вы хотите переместить фиксацию в промежуточную область - это отмените ее и переместите все изменения, которые были в ней, в промежуточную область (фактически перевод ветки в состояние, в котором она была до фиксации) - как ты делаешь это? Или это то, что вы не можете сделать?

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

Джонатан М. Дэвис
источник

Ответы:

286
git reset --soft HEAD^

Это сбросит ваш индекс до HEAD^(предыдущей фиксации), но оставит ваши изменения в промежуточной области.

Есть несколько удобных диаграмм в git-resetдокументации

Если вы работаете в Windows, вам может потребоваться использовать этот формат:

git reset --soft HEAD~1
Abizern
источник
20
Если это ничего не дает, попробуйте, git reset --soft HEAD~1что означает то же самое, но также работает в Windows.
Роман Старков
9
Чтобы уточнить, тильда и карот означают разные вещи в версиях git. HEAD ~ 1 всегда следует за первым родителем коммита, что может быть не тем, что вам нужно, если это коммит слияния, имеющий несколько родителей. Что касается оболочки Windows cmd, вам просто нужно выйти из carot с помощью другой carot, например, «git reset --soft HEAD ^^», чтобы вернуться к «HEAD ^». Это чисто артефакт командной оболочки Windows, поэтому вам не нужно этого делать, если вы используете графический интерфейс git в Windows. Тильда и карот объясняются на schacon.github.io/git/git-rev-parse#_specifying_revisions
ahains
Я добавил ссылку на "удобные схемы". Не могли бы вы быстро проверить, ведет ли он к тому разделу, который вы имели в виду? Спасибо
Neuron
7

Простой способ

  1. Зафиксированные файлы в промежуточной области

    git reset --soft HEAD^1

  2. Подготовка к UnStage : (используйте "git reset HEAD ...", чтобы отключить этап)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

здесь * -> все файлы заканчиваются на ds.txt для отмены постановки.

См. Рисунок ниже для ясности:

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

Шиванандам
источник