Когда я делаю git log -3 --oneline
, я получаю следующий вывод:
c42e88d (HEAD) Error handling: Bug fix
f5d394d (origin/master, origin/HEAD, master) Show Details
7d465b6 enhancement
Когда я делаю git branch
, я получаю следующее:
* (HEAD detached from f5d394d)
master
Как я могу отправить коммит HEAD c42e88d на удаленный мастер?
Я пытался git push origin master
, но у меня получается Everything up-to-date
. Что я могу сделать в этом случае?
detached HEAD
?HEAD
указывает на текущую ветку/фиксацию, которую вы проверили. Вы можете нажать, если HEAD
указывает на ветку (обычный случай).
Однако, если ваша голова указывает на фиксацию, она называется detached HEAD
, поскольку у вас нет проверенной ветки (HEAD
отсоединен от какой-либо ветки.
Другими словами, вы проверили фиксацию, но нажали master
, у которой нет фиксации.
Чтобы избавиться от отсоединенных HEAD
, просто перейдите в ветку:
git checkout master
Затем ваш HEAD
указывает на ветку master
.
Если ваш коммит там не виден, но вы хотите его отправить, у вас есть две возможности:
Скопируйте один коммит в master, используя git cherry-pick c42e88d
Установите master
так, чтобы он указывал на c42e88d
, используя git reset HEAD
. Однако вы можете потерять изменения, если они зафиксированы в master
, но не в c42e88d
.
В вашем случае все коммиты от мастера также существуют в истории c42e88d
, поэтому оба варианта делают одно и то же.
Если у вас есть незафиксированные изменения, вы можете захотеть stash
их перед запуском checkout
и вытолкнуть stash
после сброса/сбора вишен.
Если вы хотите, чтобы ваша локальная ветка master
перешла к этому коммиту:
git checkout master
git merge --ff-only c42e88d
# you can then :
git push origin master
Если вы хотите остаться в состоянии detached HEAD
и просто нажать текущую фиксацию:
git push origin HEAD:master
# or
git push origin c42e88d:master
Использовать
git push origin HEAD:master
git push origin master
— это сокращение от git push origin refs/heads/master:refs/heads/master
. Первый refs/heads/master
в качестве исходной ссылки означает мастер в локальном репозитории, а второй в качестве целевой ссылки означает мастер в удаленном репозитории. Поскольку HEAD
и master
не указывают на один и тот же коммит, использовать git push origin master
неправильно.
Если вы действительно хотите использовать git push origin master
, вам нужно сначала объединить отдельный HEAD с локальным мастером:
git checkout master
git merge c42e88d
# in your case you can also use "git reset" in stead of "git merge"
# git reset c42e88d --hard
git push origin master