Я делал какую-то работу в своем хранилище и заметил, что файл имеет локальные изменения. Я больше не хотел их, поэтому я удалил файл, думая, что могу просто извлечь новую копию. Я хотел сделать Git эквивалент
svn up .
Использование git pull
не похоже на работу. Случайный поиск привел меня на сайт, где кто-то рекомендовал делать
git checkout HEAD^ src/
( src
каталог, содержащий удаленный файл).
Теперь я узнаю, что у меня оторванная голова. Я понятия не имею, что это такое. Как я могу отменить?
git checkout master
вернет вас на главную ветку. Если вы хотите стереть любые изменения рабочей копии, вы, вероятно, захотите это сделатьgit reset --hard
.git checkout -- src/
create temp branch - checkout temp branch - checkout master - delete temp branch
working copy changes
? Вы имеете в виду изменения, которые вы внесли в файлы после проверки другого коммита (т. Е. Изменения, которые вы сделали, находясь в отключенном состоянии головы)?Ответы:
Отделенная голова означает, что вы больше не находитесь на ветке, вы отметили один коммит в истории (в данном случае это коммит, предшествующий HEAD, т.е. HEAD ^).
Если вы хотите удалить свои изменения, связанные с отделенным HEAD
Вам нужно только проверить филиал, в котором вы были, например,
В следующий раз, когда вы изменили файл и хотите восстановить его до состояния, в котором он находится в индексе, сначала не удаляйте файл, просто сделайте
Это восстановит файл foo до состояния, в котором он находится в индексе.
Если вы хотите сохранить ваши изменения, связанные с отделенным HEAD
git branch tmp
- это сохранит ваши изменения в новой ветке под названиемtmp
.git checkout master
master
, запуститеgit merge tmp
изmaster
ветки. Вы должны быть наmaster
ветке после запускаgit checkout master
.источник
Previous HEAD position was 7426948...
Если вы изменили файлы, которые не хотите терять, вы можете нажать их. Я зафиксировал их в отдельном режиме, и после этого вы можете перейти во временную ветку для последующей интеграции в master.
Извлеченный из:
Что делать с коммитом сделанным в отстраненной голове
источник
git stash
? Это первое, что приходит мне в голову. Создание новой ветки будет излишним.git rebase my-temporary-work
и затем удалить ветку,git branch -d my-temporary-work
чтобы она выглядела так, как будто вы в первую очередь зафиксировали правильную ветку.git stash
звучит как идеальный инструмент для этого случая. Не могли бы вы написать ответ с предложенными шагами для достижения этой цели?Решение без создания временной ветки.
Как выйти («исправить») состояние отключенного HEAD, когда вы уже что-то изменили в этом режиме и, при желании, хотите сохранить свои изменения:
Внесите изменения, которые вы хотите сохранить. Если вы хотите перенять какие-либо изменения, сделанные вами в отключенном состоянии HEAD, зафиксируйте их. Подобно:
Отменить изменения, которые вы не хотите сохранять. При аппаратном сбросе будут отменены все незафиксированные изменения, которые вы сделали в отключенном состоянии HEAD:
(Без этого шаг 3 потерпел бы неудачу, жалуясь на измененные незафиксированные файлы в отдельном HEAD.)
Проверьте свою ветку. Выйдите из отключенного состояния HEAD, проверив ветку, над которой вы работали ранее, например:
Возьмите на себя ваши коммиты. Теперь вы можете взять коммиты, которые вы сделали в отдельном состоянии HEAD, путем выбора вишни, как показано в моем ответе на другой вопрос .
источник
git reset --hard
было именно то, что мне было нужно, потому что я хочу, чтобы исходным кодом был источник, и локальные изменения должны быть удалены.Отдельная голова означает:
Если у вас нет изменений: вы можете переключиться на мастер, применив следующую команду
Если у вас есть изменения, которые вы хотите сохранить:
В случае отсоединенного HEAD коммиты работают как обычно, за исключением того, что ни одна из названных веток не обновляется. Чтобы обновить основную ветвь с вашими зафиксированными изменениями, создайте временную ветвь там, где вы находитесь (таким образом, временная ветвь будет иметь все зафиксированные изменения, сделанные вами в отсоединенном HEAD), затем переключитесь на основную ветвь и объедините временную ветвь с хозяин.
источник
Вот что я только что сделал, когда понял, что у меня отстраненная голова, и я уже внес некоторые изменения.
Я совершил изменения.
Я вспомнил хеш (1fe56ad) коммита. Тогда я проверил ветку, на которой я должен был быть.
Наконец я применил изменения коммита к ветке.
Я думаю, что это немного проще, чем создание временной ветки.
источник
git cherry-pick <hash>
.Если вы внесли некоторые изменения, а затем поняли, что находитесь на отсоединенной голове, для этого есть простое решение: stash -> checkout master -> stash pop:
Вы будете иметь свои незафиксированные изменения и нормальную «прикрепленную» ГОЛОВКУ, как будто ничего не произошло.
источник
Когда вы извлекаете конкретный коммит
git
, вы попадаете в состояние отдельного заголовка ... то есть ваша рабочая копия больше не отражает состояние именованной ссылки (например, "master"). Это полезно для изучения прошлого состояния хранилища, но не того, что вы хотите, если вы действительно пытаетесь отменить изменения.Если вы внесли изменения в конкретный файл и просто хотите отменить их, вы можете использовать
checkout
команду следующим образом:Это отменит все незафиксированные изменения и вернет файл в любое состояние, в котором он находится в заголовке вашей текущей ветки. Если вы хотите отменить изменения, которые вы уже зафиксировали, вы можете использовать
reset
команду. Например, это вернет хранилище в состояние предыдущей фиксации, отбросив все последующие изменения:Тем не менее, если вы делитесь хранилищем с другими людьми, a
git reset
может быть разрушительным (поскольку оно стирает часть истории хранилища). Если вы уже поделились изменениями с другими людьми, вы, как правило, хотитеgit revert
вместо этого посмотреть , что генерирует «антикоммит», то есть создает новый коммит, который «отменяет» рассматриваемые изменения.Книга Git имеет больше деталей.
источник
git checkout path/to/foo
может привести к конфликтуgit checkout some-branch
, поэтому было бы лучше использовать его,git checkout -- path/to/foo
чтобы избежать этих конфликтов.HEAD находится в указателе, и в результате он указывает - прямо или косвенно - на определенный коммит:
Attached HEAD означает, что он прикреплен к некоторой ветви (то есть указывает на ветку).
Отделенный заголовок означает, что он не присоединен к какой-либо ветви, т. Е. Указывает непосредственно на некоторый коммит.
Другими словами:
Чтобы лучше понять ситуации с прикрепленной / отсоединенной головкой, давайте покажем шаги, ведущие к четверке рисунков выше.
Мы начинаем с того же состояния хранилища (изображения во всех квадрантах одинаковы):
Теперь мы хотим выполнить
git checkout
- с различными целями в отдельных изображениях (команды на них сверху серый цвет , чтобы подчеркнуть , что мы только собираемся применить эти команды):Это ситуация после выполнения этих команд:
Как вы можете видеть, точки Отправляйтесь к цели по
git checkout
команде - на ветку (первые 3 изображения квадруплета), или (непосредственно) до фиксации (последнее изображение четверки).Содержимое рабочего каталога также изменяется в соответствии с соответствующим коммитом (снимком), то есть с коммитом, указанным (прямо или косвенно) HEAD.
Итак, мы сейчас находимся в той же ситуации, что и в начале этого ответа:
источник
Так как «состояние отдельного заголовка» приводит вас к временной ветке, просто используйте,
git checkout -
которая ставит вас на последнюю ветку, на которой вы были.источник
git reflog
и могут быть перенесены в новый филиал или черезgit cherry-pick
существующий филиал. Смотрите этот вопрос .Чтобы уточнить ответ @Philippe Gerber, вот он:
Прежде
cherry-pick
,git checkout master
в этом случае необходимо. Кроме того, она необходима только сcommit
инdetached head
.источник
добавление
Если ветка, в которую вы хотите вернуться, была последней сделанной вами проверкой, вы можете просто использовать
checkout @{-1}
. Это вернет вас к предыдущей проверке.Кроме того, вы можете использовать псевдоним этой команды, например,
git global --config alias.prev
так что вам просто нужно набрать,git prev
чтобы вернуться к предыдущей проверке.источник
Нахождение в «отделенной голове» означает, что HEAD ссылается на конкретную безымянную фиксацию (как противоположность именованной ветви) (см. Раздел https://git-scm.com/docs/git-checkout Detached head )
Чтобы решить проблему, вам нужно только выбрать ветку, которая была выбрана ранее
git checkout @{-1}
источник
Когда вы находитесь в ситуации отсоединения головы и создали новые файлы, сначала убедитесь, что эти новые файлы добавлены в индекс, например с помощью:
Но если вы только изменили или удалили существующие файлы, вы можете добавить (-a) и зафиксировать сообщение (-m) одновременно с помощью:
Затем вы можете просто создать новую ветку с вашим текущим состоянием с помощью:
У вас будет новая ветка, и все ваши настройки будут в этой новой ветке. Затем вы можете продолжить нажимать на пульт и / или оформить заказ / вытащить / объединить, как вам угодно.
источник
Отдельная голова означает, что вы не проверили свою ветку должным образом или вы только что проверили один коммит.
Если вы столкнулись с такой проблемой, сначала спрячьте свои локальные изменения, чтобы не потерять их.
После этого ... оформить нужную ветку с помощью команды:
Допустим, вы хотите ветку MyOriginalBranch:
git checkout -b someName origin / MyOriginalBranch
источник
Гит сказал мне, как это сделать.
если вы набрали:
Сохранить статус
Затем:
источник
Я хотел сохранить свои изменения так, я просто исправляю это, делая ...
это работа для меня
источник
Обычно
HEAD
указывает на ветку. Когда он не указывает на ветку, а когда он указывает на хеш коммита,69e51
это означает, что у вас есть отсоединенный HEAD. Вам нужно указать две ветки, чтобы решить проблему. Вы можете сделать две вещи, чтобы исправить это.hash
источник
Вы, вероятно, сделали
git reset --hard origin/your-branch
.Попробуй просто
git checkout your-branch
источник
работал на меня. Речь шла просто о явном указании удаленного имени и имени филиала.
источник
В моем случае я запустил
git status
и увидел, что у меня есть несколько неотслеживаемых файлов в моем рабочем каталоге.Мне просто нужно было почистить их (поскольку они мне не нужны), чтобы выполнить ребаз, который я хотел выполнить.
источник
Это работает для меня, он назначит новую ветку для отдельного руководителя:
git checkout new_branch_name detached_head_garbage_name
источник
Отделенная ГОЛОВА означает, что вы в настоящее время не находитесь ни в одной ветви. Если вы хотите сохранить текущие изменения и просто создать новую ветку, то вы делаете это:
После этого вы, возможно, захотите объединить эту новую ветку с другими ветками. Всегда полезна команда git "собака" :
источник