Как выполнить 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.