2015-03-28 6 views
1

Если я понимаю правильно, когда у вас есть обособленная голова (шейная> фиксации), то мерзавец CHECKOUT филиал решает вопрос (филиал шейной> [-> someCommit])ЧТО ТАКОЕ ИСПОЛЬЗОВАНИЕ ОТКРЫТОГО ГОЛОВА?

Но что сброс к ветка делать? Предполагалось установить указатель на объект (часто ветвь), на который HEAD указывает на другую ветку. Но так как у нас нет этого среднего человека (ветка) - что он делает тогда? И почему?

ответ

1

Он просто перемещает РУКОВОДИТЕЛЯ: как я уже говорил в "Practical uses of git reset --soft?":

git reset все о движении головой.

Если вы перемещаете HEAD в другой фиксатор, тогда HEAD остается detached.

После a discussion о разнице между git reset и git checkout против отсоединенных или прикрепленных природ symbolic reference HEAD, вот что мы нашли вместе:

  • если ГОЛОВЫ точки на ветви, git reset будет двигаться отраслями, а также в <something>: сброс его не делает его отсоединенным, он меняет ветвь HEAD
  • , если HEAD указывает на фиксацию (уже отсоединен), тогда она останется отсоединенной: по мере того как OP кладет ее:

поэтому, когда отсоединен, и я звоню git reset <branch>, он находит фиксацию за веткой и изменяет фиксацию в .git/HEAD для фиксации, на которую ссылается <branch>.

Рассмотрим ГОЛОВУ, который прикреплен к branch1 (cat .git/HEAD вернется branch1):

  • git checkout branch2 изменит ГОЛОВА к branch2 и оставить branch1 нетронутые
  • git reset branch2 сбросит branch1 ГОЛОВА к branch2: cat .git/refs/heads/branch1 будет содержать тот же SHA1, что и branch2.

Вот разница:

  • сброс двигается ГОЛОВА (как я уже сказал в начале: это все о перемещении головы)
  • контроля переключает ветвь (или отрывает голову)

Относительно прикрепленного/отсоединенного типа ГОЛОВКИ:

  • re set не меняет характер HEAD (если он был прикреплен, он остается прикрепленным)
  • Оформить заказ можно изменить характер HEAD (если он был прикреплен, и вы проверяете фиксацию вместо ветви, HEAD становится отсоединенной)
+0

не проверка также о перемещении HEAD? На мой взгляд, проверка перемещает HEAD, тогда как сброс перемещает предмет, который HEAD указывает на ... – Novellizator

+0

Как я упоминал в разделе «В чем разница между« git reset »и« git checkout »?» (http://stackoverflow.com/a/3639387/6309), 'git checkout' изменяет рабочее дерево (а не индекс). 'git reset' может перемещать HEAD без изменения рабочего дерева (и он может также сбросить индекс, если не' --soft'). – VonC

+0

ОК. так что в отдельной голове, а когда мы пренебрегаем рабочим деревом и индексом, то сброс ветви ветви и проверки делает по существу то же самое? (= оба перемещают голову в ветвь) – Novellizator

Смежные вопросы