Мохнатые уроды и моральные пёзды. Войти !bnw Сегодня Клубы
git
Помогал на днях одному парню с git[1] и наткнулся на неочевидную вещь: команды `git checkout branchname` и `git checkout abcde`, где `abcde` — самый свежий коммит (далее — голова) ветки `branchname`, *не эквивалентны*. Если после первой команды сделать коммит, он попадёт в `branchname` (станет её головой); если же сделать коммит после второй команды, `branchname` всё так же будет указывать на `abcde`. Ларчик открывается довольно просто. `git checkout` просто заставляет `HEAD` указывать туда, куда я сказал. Если сказать `git checkout branchname`, `HEAD` будет указывать на `branchname`, который, в свою очередь, указывает на `abcde`. Тогда при `git commit` мы обновим ветку `branchname` (которая, если кто не в курсе, просто указатель на некий коммит — голову ветки), не задевая `HEAD`. Если же сделать `git checkout abcde`, мы переходим в detached head state, то есть `HEAD` теперь указывает не на ветку, а на коммит. Если теперь сделать `git commit`, мы обновим непосредственно `HEAD`, не задевая `branchname`. Свежесозданный коммит не принадлежит ни одной ветке, так что если мы сделаем `git checkout someotherbranch`, он будет почти что потерян (см. git-reflog(1) и git-gc(1)). Жаль, что объяснение вышло таким сумбурным, но я действительно не знаю, как написать лучше.   1. http://juick.com/k0st1x/2083845
Рекомендовали: @octagram
#LQB5M4 / @minoru / 4231 день назад

привет, копетан ;)
#LQB5M4/DD6 / @ninesigns / 4228 дней назад
@4da мог написать, что это просто две разные команды :3
#LQB5M4/4RH / @ninesigns --> #LQB5M4/DD6 / 4228 дней назад
@4da Ну надо же было как-то объяснить, чем именно разные. Новички и про HEAD ещё не слышали, небось.
#LQB5M4/46Z / @minoru --> #LQB5M4/4RH / 4228 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.