Ответ 1
Теперь, когда я делаю коммиты для своего проекта, он показывает SHA-1 в командной строке в качестве рабочей ветки (вместо главной)
Это, вероятно, означает, что у вас есть "отдельно стоящая HEAD". Отдельная HEAD указывает непосредственно на фиксацию вместо указания на ветку (которая затем указывает на фиксацию). Отдельная голова подобна неназванной ветке.
Это состояние было вызвано вашей командой git checkout HEAD^
, поскольку HEAD^
относится к фиксации, а не к имени ветки. Вероятно, вам захотелось сделать git reset --hard HEAD^
- , в то время как мастер по-прежнему был активной веткой - для удаления последней фиксации из мастера (он все равно будет существовать на диске и может быть доступен через reflog, пока его запись в reflog expired).
Как я могу указать HEAD на последнюю фиксацию, с которой я работаю?
HEAD
всегда является фиксацией, с которой вы работаете, независимо от того, является ли она отключена или нет.
Если вы имеете в виду "Как я могу указать мастер на последнюю фиксацию, с которой я работаю?", то это то же самое, что задать "Как я могу заставить master указать на HEAD
?". Ответ
git branch -f master HEAD
(на самом деле вы можете оставить HEAD
, так как это значение по умолчанию). Это принудительно сбрасывает master на commit в настоящее время на HEAD
. Любые коммиты на хозяине, которые недоступны через другую ветку или текущую HEAD
, впредь будут доступны только через reflog и в конечном итоге будут собраны мусором (это отбрасывает, от хозяина, что-либо в мастер, который не находится в HEAD
), Возможно, вы захотите снова подключить ваш HEAD
к этому обновленному хозяину после этого.
git checkout master
Вместо двух вышеприведенных команд вы можете снова подключить HEAD
, затем reset master с этими двумя последовательными командами:
git checkout master # reattach, commit at HEAD is now the unwanted commit
git reset --hard [email protected]{1} # reset master to the commit at HEAD before the prior command
Обозначение [email protected]{1}
используется для доступа к записям в рефлоге. Этот пример просто означает "предыдущий HEAD
" (т.е. "Commit в HEAD
до самой последней операции, которая затронула HEAD
" ).