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" - это исходная ветвь, заданная манифестом. вы можете изменить его для определенной ветки.
(Я знаю, что это не точная тема, но некоторые, подобные мне, могут попасть сюда ^^)