Используя git я сделал что-то вроде этого
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Потому что он сказал мне, что я все еще могу совершить, когда в отстраненном состоянии головы, я сделал это. Но теперь я хочу объединить мою отделенную головную ветку и локальную главную ветвь, а затем перенести мою кучу изменений в origin / master.
Поэтому мой вопрос заключается в том, как я могу объединить основную ветвь с моим текущим состоянием (отдельная голова)
git
git-checkout
БЕНЗОЛА
источник
источник
Ответы:
Создайте ветку, в которой вы находитесь, затем переключитесь на master и объедините ее:
источник
Вы могли бы сделать что-то вроде этого.
Еще проще было бы
но есть небольшая опасность того, что если вы допустите ошибку, может быть немного сложнее восстановить коммиты, сделанные на отсоединенной голове.
источник
git merge HEAD@{1}
вы, вероятно, должны убедиться, что именно ту, которую вы хотите использовать,git reflog
Вот что я сделал:
В основном, подумайте о
detached HEAD
новой ветке, без названия. Вы можете зафиксировать в этой ветке, как и в любой другой ветке. Как только вы закончите фиксацию, вы хотите отправить его на пульт.Итак, первое, что вам нужно сделать, это дать
detached HEAD
ему имя. Вы можете легко сделать это, находясь на этомdetached HEAD
:Теперь вы можете отправить его на удаленный, как и любой другой филиал.
В моем случае, я также хотел бы быстро перенести эту ветку на мастеринг вместе с коммитами, которые я сделал в
detached HEAD
(сейчасsome-new-branch
). Все, что я сделал, былоgit pull # To make sure my local copy of master is up to date
git merge master // This added current state of master to my changes
Конечно, я позже слил это
master
.Вот и все.
источник
git checkout -b new-branch
работал на меня. Другие предложения требовалиgit branch new-branch
, но это оставило меня все еще в отстраненной голове, и новая ветвь не приняла мои изменения.Вы можете просто сделать
git merge <commit-number>
илиgit cherry-pick <commit> <commit> ...
По предложению Райана Стюарта вы также можете создать ветку из текущей HEAD:
Или просто тег:
источник
git rev-parse HEAD
В случае отсоединенного HEAD коммиты работают как обычно, за исключением того, что ни одна из названных веток не обновляется. Чтобы обновить основную ветвь с вашими зафиксированными изменениями, создайте временную ветвь там, где вы находитесь (таким образом, временная ветвь будет иметь все зафиксированные изменения, сделанные вами в отсоединенном HEAD), затем переключитесь на основную ветвь и объедините временную ветвь с мастер.
источник
Легкое решение - просто создать новую ветку для этого коммита и оформить заказ:
git checkout -b <branch-name> <commit-hash>
.Таким образом, все сделанные вами изменения будут сохранены в этой ветке. Если вам нужно очистить ветку master от оставшихся коммитов, обязательно запустите
git reset --hard master
.При этом вы будете переписывать свои ветки, поэтому не мешайте никому с этими изменениями. Обязательно ознакомьтесь с этой статьей для лучшей иллюстрации состояния отключенного HEAD .
источник
Может быть, не лучшее решение (перепишет историю), но вы также можете сделать
git reset --hard <hash of detached head commit>
.источник