Что делать с фиксацией, сделанной в отрешенной голове
С помощью 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 (wich does complete because there was some error due to the fact that i'm no more on master)
потому что git сказал мне, что я могу совершить сталь, когда в отстраненном состоянии головы, я так и сделал. Но теперь я хочу объединить мою отделенную головную ветвь и мою локальную главную ветвь, а затем нажать мою кучу изменений в origin/master.
Итак, мой вопрос заключается в том, как я могу объединить главную ветвь с моим фактическим состоянием (отделенной головой)
8 ответов:
создайте ветку, где вы находитесь, затем переключитесь на master и объедините ее:
git branch my-temporary-work git checkout master git merge my-temporary-work
вы могли бы сделать нечто подобное.
# Create temporary branch for your detached head git branch tmp # Go to master git checkout master # Merge in commits from previously detached head git merge tmp # Delete temproary branch git branch -d tmp
еще проще было бы
git checkout master git merge HEAD@{1}
но это имеет небольшую опасность, что если вы сделаете ошибку, это может быть немного сложнее восстановить коммиты, сделанные на отсоединенной голове.
вы можете просто сделать
git merge <commit-number>
илиgit cherry-pick <commit> <commit> ...
как предложил Райан Стюарт, вы также можете создать ветку из текущей головы:
git branch brand-name
или просто тег:
git tag tag-name
вот что я сделал:
в принципе, думаю, что от
detached HEAD
как новая ветка, без названия. Вы можете совершить в эту ветвь так же, как и в любую другую ветвь. Как только вы закончите фиксацию, вы хотите нажать его на пульт дистанционного управления.Итак, первое, что вам нужно сделать, это дать этой
detached HEAD
имя. Вы можете легко сделать это, как, находясь на этомdetached HEAD
:git checkout -b some-new-name
теперь вы можете нажать его на пульт, как и любую другую ветку.
в моем случае, я также хотел быстро перемотать эту ветку, чтобы освоить вместе с коммитами, которые я сделал в
detached HEAD
(нынеsome-new-branch
). Все, что я сделал, этоgit checkout master
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
git merge master // This added current state of master to my changes
конечно, я слил его позднее
master
.вот и все.
в случае отсоединенной головы, фиксирует работу как обычно, за исключением того, что ни одна именованная ветвь не обновляется. Чтобы обновить главную ветвь с помощью зафиксированных изменений, создайте временную ветвь там , где вы находитесь (таким образом, временная ветвь будет иметь все зафиксированные изменения, которые вы сделали в отсоединенной головке), затем переключитесь на главную ветвь и объедините временную ветвь с главной.
git branch temp git checkout master git merge temp
Я также основал статью, где объясняется, как обрабатывать. Я добавляю его, потому что это немного отличается от того, что было предложено. Но я думаю, что все предложения действительны
http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html
позже я приму первый ответ как хороший друг
может быть, не лучшее решение, (перепишет историю) но вы также можете сделать
git reset --hard <hash of detached head commit>
.
простое решение - просто создать новую ветвь для этой фиксации и проверить ее:
git checkout -b <branch-name> <commit-hash>
.таким образом, все внесенные изменения будут сохранены в этой ветке. Если вам нужно очистить свою главную ветвь от оставшихся коммитов, обязательно запустите
git reset --hard master
.С этим вы будете переписывать свои ветви, поэтому не беспокойте никого этими изменениями. Обязательно взгляните на эту статью для лучшей иллюстрации отрезанная голова государство.