Проверка ветки перемещает локальный указатель HEAD
так, чтобы он указывал на тот же коммит, на который ссылается ветка. Например:
Когда на ветке mybranch
(C
s - коммиты):
HEAD
|
V
master mybranch
| |
V V
C1 -------> C2 -------> C3
После запуска git checkout master
:
HEAD
|
V
master mybranch
| |
V V
C1 -------> C2 -------> C3
Это также перемещает файлы в вашем рабочем каталоге по мере необходимости, так что это идеальный снимок того, как проект выглядел при этой фиксации. Он не удаляет и не изменяет коммиты, поэтому вы не потеряете работу в одной ветви, проверяя другую.
Что произошло в случае «отсоединенной головы», как описано в этом другом вопросе, так это то, что C3
не связан с ветвью. Чтобы это исправить, вам нужно обновить коммит, на который указывает ветка master
, чтобы он включал новый материал (C3
). Извлечение master
говорит git, что вы сейчас работаете с мастер-веткой, затем выполняете хард reset
с SHA1 коммита, который вы хотите, чтобы был на кончике вашей master
ветки обновляет ссылки на ветки на то, что вы хотите.
Edit:
В этом случае отсоединенная голова не была проблемой. Просто помните, что фиксация и нажатие - это две разные вещи в git. Фиксация не связывается с центральным репозиторием, как в Subversion. После внесения изменений в рабочий каталог вы запускаете git add filename
один раз для каждого измененного файла, где filename
- это имя файла. После добавления всех файлов в индекс вы фиксируете их с помощью git commit
.
Сокращением для этого является использование git commit -a
, которое автоматически добавит измененные файлы в индекс перед фиксацией. Это позволяет пропустить шаги git add
. Обратите внимание, что git commit -a
будет добавлять только измененные файлы. Если вы вводите новый файл, который никогда не был зафиксирован, вы должны вручную добавить его с помощью git add
.
Как только ваш коммит сделан, вы можете запустить git push
, чтобы отправить этот коммит в ваш удаленный репозиторий и обновить удаленные ветки. Это делает только удаленную связь. В отличие от Subversion, сам коммит обрабатывается локально, без какого-либо взаимодействия с сервером.