Причина, по которой я спрашиваю это, заключается в том, что я случайно сделал git commit -a
, который включал файл, который я еще не хотел зафиксировать. Моим решением было сделать следующее:
git reset --soft HEAD^
git reset -- file/with/changes_not_to_committed
git commit -C HEAD@{1}
Здесь я перемотал ветку одним коммитом, сохранив индекс и рабочее дерево, затем вытянул file/with/changes_not_to_committed
из еще более старой ревизии в индекс, а затем зафиксировал индекс, используя сообщение коммита из предыдущей ветки руководитель коммит. Ни один из вызовов git-reset
не затрагивает рабочую копию, поэтому мои изменения в file/with/changes_not_to_committed
сохраняются, но больше не записываются в ревизии HEAD
.
Однако было бы проще, если бы я мог вытащить file/with/changes_not_to_committed
из ревизии HEAD^
прямо в индекс , не касаясь рабочей копии . Поскольку в противном случае индекс уже представляет состояние, которое я хочу, я мог бы просто изменить коммит HEAD
, получив последовательность, подобную этой:
git magic-pony HEAD^ file/with/changes_not_to_committed
git commit --amend -C HEAD
Это почти , что я получу, заменив git-magic-pony
на git-checkout
, за исключением требования оставить рабочую копию нетронутой и обновить только индекс. Кажется, нет способа заставить git-checkout
не трогать оба.
Мой вопрос: существует ли git-magic-pony
, и если да, то под каким именем?