Как сохранить изменения в состоянии detached-head?
работая с Git, я должен был вернуться к определенной фиксации. Я внес некоторые изменения и теперь хочу их внести. Как правильно это сделать?
мой проект теперь находится в состоянии отсоединенной головы. Будут ли сохранены мои изменения, если я сделаю фиксацию с
git commit
? В противном случае, что я должен сделать, чтобы не потерять свои изменения?
3 ответов
отказ от ответственности: git не сложно, это просто универсальный. Не пугайтесь только потому, что я забрел в длинный ответ:)
вы:master: a-b-c-d-e-f
и хотел изменить c. Ты:
* git checkout c (избегайте проверки коммитов в будущем. Вместо этого переместите головку ветки)
* изменены некоторые файлы
вы находитесь в:
master: a-b-c-d-e-f
\uncommitted-work,detached
если вы хотите повторно примените d-e-f поверх измененного "c"
(если вы толкнули, люди вниз по течению будут иметь взыскать с вышерасположенных перебазировать)
git stash .git checkout master-
git stash pop(разрешение конфликтов) git stage .git commit -m "temporary name for g"- (
master: a-b-c-d-e-f-g) -
git rebase c -i("повторно примените мою текущую ветвь к точке c и позвольте мне манипулировать коммитами в интерактивном режиме", i.e, re-parent (rebase)d-e-fна новыйc) - соблюдать руководство по интерактивные перебазирования. Вы хотите изменить порядок
gИтак, после c, затем измените команду rebase сpicktofixup.ddудалить строку,Pна место он,iчтобы войти в режим вставки, введите "fixup", затем:wqдля сохранения и выхода из vim. - (
master: a-b-c'-d'-e'-f', гдеc'результат вы слиянияgиcв ходе ребаз.d-e-fсталиd'-e'-f'поскольку их родословная изменилась, поэтому они не являются" одинаковыми " коммитами, насколько это касается git, но их содержимое остается тем же)
если вы хотите отменить d-e-f (и перепишите историю, как будто вы никогда их не делали)
(если вы толкнули, люди вниз по течению будут иметь взыскать с вышерасположенных перебазировать) :
git stash .git checkout master- (
master: a-b-c-d-e-f, С спрятанными файлами, первоначально основанными на c) -
git reset --hard c(отбросьте все файлы и коммиты на master начиная с c) - (
master: a-b-c, С спрятал файлы) -
git stash pop(разрешение конфликтов) - (
master: a-b-c-*) git stage .git commit -m "description of g"- (
master: a-b-c-g)
если вы хотите отменить D-e-f (но держите их в истории)
git stashgit revert --no-commit dgit revert --no-commit e-
git revert --no-commit f -
git push -
git stash pop(конфликтов не будет) git stage .git commit -m "Undo d-e-f in order to fix..."git push
если у вас git push d-e - f, и вы хотите держать их отдельно:
похоже, что ваши новые изменения предназначены для новой ветви мастер. git branch <foo>.
создайте новую ветвь из этой фиксации, а затем выполните commit:
git checkout -b <branchname>
git commit
предполагая, что вы уже поставили (т. е. git add myfile1 myfile2) ваших файлов.
сохранить вашу работу в отдельной главе:
git checkout -b <new-branch-name-for-detached-head> <sha-of-the-detached-head>
и если вы хотите объединить его с главного:
git checkout master
git merge <new-branch-name-you-have-just-created>