Я начал работать над некоторыми файлами в подмодуле git другого проекта. Однако, поскольку это был подмодуль git, он никогда не проверял «master», а вместо этого просто извлекал заголовок и помещал все файлы в папке в «no ветку».
Теперь, когда я случайно сделал некоторые изменения в этих файлах, я просто понял, что работаю в подмодуле моего проекта «без ветки».
Как мне поместить эти файлы в ветку (например, master), чтобы я мог их спасти?
git merge $COMMIT_SHA
однажды был в другой ветке.Состояние «без ответвления» называется отделенной HEAD. Это называется так, потому что ссылка HEAD не привязана к какой-либо ветви, вместо этого она указывает непосредственно на коммит. Чтобы присоединить HEAD к ветви, которая указывает на текущий коммит HEAD, используйте
git checkout -b branchname
.Вы можете безопасно обновить существующую ветку, включив в нее коммиты в следующей последовательности:
Или, что то же самое, используя запись reflog,
HEAD@{1}
чтобы избежать создания временной ветви:Использование временной ветки было бы хорошей идеей, если вы не собираетесь выполнять слияние сразу.
Если вы хотите принудительно перезаписать существующую ветку, чтобы указать на фиксацию в HEAD, вы можете использовать
git branch -f branchname && git checkout branchname
. Если фиксация в HEAD не основана на текущем наконечнике branchname, это приведет к изменению без перемотки на branchname, которого вы обычно избегаете (это рассматривается как история переписывания).источник
Чтобы добавить к предыдущим ответам:
Пока вы находитесь на отдельном HEAD, вы можете добавить тег:
Это добавит тег к коммиту, который сделает его видимым в
gitk
других инструментах.источник