Итак, я проделал некоторую работу в хранилище, и когда я собираюсь сделать коммит, я понимаю, что в настоящее время я не нахожусь ни в одной ветке.
Это часто случается при работе с подмодулями, и я могу решить это, но процесс утомителен, и я подумал, что должен быть более простой способ сделать это.
Есть ли простой способ вернуться на ветку, сохранив изменения?
git
branch
git-checkout
Эрик Б
источник
источник
git show
илиgit rev-parse HEAD
), переключитесь на ветку, а затемgit cherry-pick
добавьте хеш коммита.git merge _hash_
git merge <hash-of-the-commit-you-just-made>
.это помогло мне
источник
Это результат примерно так:
Итак, давайте сделаем это:
источник
git gc
между этими двумя командами, вы потеряете эти коммиты, но если вы не запустите ихgit gc
автоматически, это должен быть довольно безопасный подход. Я бы все равно согласился с ответом Бабая, но если вы хотите уберечь себя от написания двух дополнительных команд, я думаю, что это правильный путь.Оставив другой путь здесь
источник
В качестве альтернативы, вы можете настроить свои подмодули так, чтобы вместо того, чтобы находиться в состоянии отдельного заголовка по умолчанию, вы просматривали ветку.
Отредактировано, чтобы добавить:
Одним из способов является извлечение определенной ветви подмодуля, когда вы добавляете его с флагом -b:
Другой способ - просто зайти в каталог подмодулей и просто проверить его.
источник
gitmodules
возможно?Один из способов оказаться в этой ситуации - выполнить ребаз из удаленной ветки. В этом случае новые коммиты наведены на
HEAD
ноmaster
не указывает на них - он указывает на то, где он был до того, как вы перебазировали другую ветку.Вы можете сделать это своим новым
master
, выполнив:Это принудительно обновляет,
master
чтобы указатьHEAD
(без включения васmaster
), а затем переключается наmaster
.источник
Я недавно столкнулся с этой проблемой снова. Прошло много времени с тех пор, как я последний раз работал с подмодулями, и, узнав больше о git, я понял, что достаточно просто проверить ветку, в которой вы хотите выполнить коммит. Git сохранит рабочее дерево, даже если вы его не спрятали.
Если вы хотите работать в новой ветке, это должно работать для вас:
Оформить заказ не удастся, если у вас возникнут конфликты в рабочем дереве, но это должно быть довольно необычно, и если это произойдет, вы можете просто спрятать его, открыть его и разрешить конфликт.
По сравнению с принятым ответом этот ответ спасет вас от выполнения двух команд, которые в любом случае не требуют много времени для выполнения. Поэтому я не приму этот ответ, если он чудесным образом не получит больше голосов (или, по крайней мере, близко), чем принятый в настоящее время ответ.
источник
Может работать следующий метод:
Это отменит текущие изменения HEAD поверх мастера. Затем вы можете переключить ветку.
Альтернативный способ - сначала оформить заказ:
Затем Git должен отобразить SHA1 ваших отдельных коммитов, затем вы можете выбрать их, например
Или вы также можете объединить последнюю версию:
Для того, чтобы увидеть все ваши коммиты из различных отраслей (чтобы убедиться , что вы имеете их), выполните команду:
git reflog
.источник
Я знаю, что сказал Бабею в 2012 году, что я подумал, что вряд ли кто-то не поймет, что они не на ветке и не совершают. Это только что случилось со мной, поэтому я должен признать, что был неправ, но, учитывая, что до 2016 года это случилось со мной, можно утверждать, что это на самом деле маловероятно.
В любом случае, создание новой ветки, на мой взгляд, излишне. Все, что вам нужно сделать, это:
Если вы не скопировали commit-sha перед проверкой другой ветки, вы можете легко найти ее, выполнив:
источник