OwlCoder
git detached - что делать
Очень часто, работая с гитом можно столкнуться в проблемой, когда у вас есть предупреждение о detached HEAD. По просьбе трудящихся пишу почему эта проблема возникает и как её решить.
В гите есть такие понятия как коммиты и ветки. Коммит - это по сути изменения в файлах, но давайте же рассматривать коммит как некое состояние проекта (файлов проекта).
Ветка - это по сути серия коммитов, а HEAD ветки - указатель на последний (или не последний) коммит. То есть если у нас есть ветка master и ветка dev, но HEAD ветки мастер может указывать на один коммит, а HEAD ветки dev на другой. Впрочем оба они могут указывать на один и тот же коммит, да :).
Так вот detached HEAD означает, что вы сейчас находитесь не на HEAD ветки, то есть вообще не на ветке, а на каком-то коммите.. возможно у вас даже есть незакоммиченные изменения, но что они Вам, если вы не знаете куда их коммитить.
Если вы попытаетесь сделать checkout какой нибудь ветки, то вы можете потерять текущий коммит/изменения.. и что же нам делать?
А на самом деле всё просто. Нам нужно:
- Создать временную ветку на текущем коммите. Таким образом HEAD этой ветки будет указывать на наш коммит, который был detached.
- Перейти на основную ветку, куда вы хотели этот коммит записать.
- Смержить основную ветки и новую (которую вы только что создали)
- Удалить временную ветку (ну а зачем она нам?)
Теперь тожесамое, но в командах
git checkout -b tmp
git add . && git commit -m 'my changes'
git checkout master
git merge tmp
git branch -d tmp
Продолжение следует. Чуть позже я допишу статью - как искать потерянные коммиты и тд.