Как выполнить git-commit из ветки в отдельную HEAD?

Мой реф HEAD указывает ветку foo, что указывает на фиксацию 123abc; и у меня есть постановочная работа.

Как git commit эта работа, перемещение HEAD во вновь созданный коммит, но без перехода на ветку?

(отсюда: оставив foo указать на 123abc)

Можно ли сделать это с помощью одного git команда?

3 ответа

Решение

Просто отсоедините, а затем зафиксируйте:

git checkout --detach
git commit -m "Commit as usual"

Если HEAD прямо указывает на фиксацию 123abc, он уже находится в отключенном состоянии HEAD, а не в foo. git commit создаст новый коммит и переместит HEAD в новую фиксацию, оставив foo неподвижен.

Если HEAD указывает на refs/heads/foo а также refs/heads/foo указывает на 123abc, Вы можете запустить git checkout 123abc а затем совершите фиксацию.

Вы можете просто зафиксировать, а затем выполнить сброс:

# from foo branch
git commit -m 'your work here'
git reset --soft HEAD~1

Это переместит указатель HEAD назад на одну фиксацию в 123abc, но также будет выполнять всю работу в этом коммите.

Существуют и другие типы сброса (смешанный, жесткий), которые выполняют варианты вышеупомянутого. Не зная конечной цели, неясно, какой сброс следует использовать. В целом, однако, перемещение HEAD назад на один коммит - это то, что вы сделали бы, если бы захотели переписать предыдущий коммит HEAD.

Другие вопросы по тегам