Git: "В настоящее время нет ни одного ветки". Есть ли простой способ вернуться на ветку, сохраняя изменения?

Итак, я проделал определенную работу в репозитории, и когда я собираюсь совершить, я понимаю, что я не в настоящее время в какой-либо отрасли.

Это происходит очень часто при работе с подмодулями, и я могу его решить, но процесс утомительный, и я думал, что должен быть более простой способ сделать это.

Есть ли простой способ вернуться на ветку, сохраняя изменения?

Ответ 1

Если вы еще не совершили:

git stash
git checkout some-branch
git stash pop

Если вы совершили и ничего не изменили с тех пор:

git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}

Если вы совершили, а затем сделали дополнительную работу:

git stash
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
git stash pop

Ответ 2

это помогло мне

git checkout -b newbranch
git checkout master
git merge newbranch
git branch -d newbranch

Ответ 3

git checkout master

Это приведет к следующему:

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

1e7822f readme
0116b5b returned to clean django

If you want to keep them by creating a new branch, this may be a good time to do so with:
git branch new_branch_name 1e7822f25e376d6a1182bb86a0adf3a774920e1e

Итак, давайте сделаем это:

git merge 1e7822f25e376d6a1182bb86a0adf3a774920e1e

Ответ 4

Оставив здесь другой путь

git branch newbranch
git checkout master 
git merge newbranch 

Ответ 5

В качестве альтернативы вы можете настроить свои подмодули, чтобы вместо того, чтобы находиться в состоянии по умолчанию, вы проверяете ветку.

Отредактировано для добавления:

Один способ - проверить конкретную ветвь подмодуля, когда вы добавляете его с флагом -b:

git submodule add -b master <remote-repo> <path-to-add-it-to>

Другой способ - просто войти в каталог подмодуля и просто проверить его

git checkout master

Ответ 6

Недавно я снова столкнулся с этой проблемой. Прошло некоторое время с тех пор, как я в последний раз работал с подмодулями и узнал больше о git, я понял, что просто проверить ветку, которую вы хотите зафиксировать, достаточно. git будет поддерживать рабочее дерево, даже если вы его не сбрасываете.

git checkout existing_branch_name

Если вы хотите работать в новой ветке, это должно сработать для вас:

git checkout -b new_branch_name

Вывод завершается с ошибкой, если у вас есть конфликты в рабочем дереве, но это должно быть довольно необычным, и если это произойдет, вы можете просто занести его в папку, всплывать и разрешать конфликт.

По сравнению с принятым ответом, этот ответ спасет вас от выполнения двух команд, которые на самом деле не так долго выполняются. Поэтому я не буду принимать этот ответ, если он чудесным образом не получит больше голосов (или, по крайней мере, близко), чем принятый в настоящее время ответ.

Ответ 7

Может работать следующий метод:

git rebase HEAD master
git checkout master

Это приведет к перестановке текущих изменений HEAD поверх мастера. Затем вы можете переключить ветвь.


Альтернативный способ - сначала проверить ветвь:

git checkout master

Затем Git должен отображать SHA1 ваших отдельных фиксаций, затем вы можете выбрать их, например.

git cherry-pick YOURSHA1

Или вы также можете объединить последнюю версию:

git merge YOURSHA1

Чтобы просмотреть все ваши фиксации из разных ветвей (чтобы убедиться, что они у вас есть), запустите: git reflog.

Ответ 8

Я знаю, что я сказал ребенку в 2012 году, что, по-моему, маловероятно, что кто-то не поймет, что они не на ветке и не совершают. Это произошло со мной, поэтому, я думаю, я должен признать, что я ошибался, но учитывая, что до 2016 года это произошло со мной, вы можете утверждать, что это на самом деле маловероятно.

Во всяком случае, создание новой ветки, по-моему, слишком велико. Все, что вам нужно сделать, это:

git checkout some-branch
git merge commit-sha

Если вы не скопировали commit-sha, прежде чем проверять другую ветку, вы можете легко найти ее, выполнив:

git reflog

Ответ 9

Для тех, кто использовал репо и забыл об этом, магическая команда:

repo start -all origin

"origin" - это исходная ветвь, заданная манифестом. вы можете изменить его для определенной ветки.

(Я знаю, что это не точная тема, но некоторые, подобные мне, могут попасть сюда ^^)