Что есть checkout
в git?
Я знаю, что когда вы делаете checkout
это с определенной веткой, HEAD
точки на эту ветку. Но что это на самом деле означает? Означает ли это, что я могу работать над этой веткой? Если да, то без проверки ветки я не смогу с ней работать?
Кроме того, что remote checkout
значит? Чем это полезно?
git
git-checkout
Daehaai
источник
источник
Ответы:
Как вы заметили,
HEAD
это метка, указывающая, где вы находитесь в дереве фиксации. Он движется вместе с вами, когда вы переходите от одной фиксации к другой.git checkout <commit>
- это основной механизм перемещения по дереву фиксации, перемещая ваш focus (HEAD
) на указанную фиксацию.Фиксация может быть указана любым из нескольких способов: хешем фиксации, именем ветки, именем тега, относительным синтаксисом (
HEAD^
,HEAD~1
и т. Д.) И т. Д. Часто бывает полезно рассматривать оформление как изменение ветвей, и есть некоторые варианты, которые работают с этой точки зрения, но все они ссылаются на коммиты.Чтобы оформить заказ, фиксация имеет некоторые побочные эффекты, кроме перемещения
HEAD
.-b
опцией будет создана новая ветка на основе текущего коммита, а затем сделана активной.--track
опцией проверенная ветка может быть уведомлена об удаленной ветке--orphan
опцией создается новая ветка (например, с-b
), но она не будет основана на какой-либо существующей фиксации.Есть еще несколько опций, о которых вы можете прочитать на странице руководства git checkout , и все они вращаются вокруг перехода от одного коммита к другому, просто меняя, какой эффект этот ход имеет помимо перемещения
HEAD
.источник
git checkout <commit> <path>
не переключает ветки.git checkout <path>
.Позвольте мне объяснить некоторые варианты использования проверки с файлом, папкой и ветвями, чтобы это могло быть полезно для понимания.
Допустим, у нас есть папка с именем,
dev
аindex.html
также все отслеживается, и рабочий каталог чист.Если я случайно изменю имя файла
index.html
и хочу отменить это действие, я просто воспользуюсьgit checkout index.html
этим, он восстановит это состояние файла из текущей выбранной ветки репозитория.Теперь, если я внес изменения в
dev
папку и хочу ее восстановить. Я могу использовать,git checkout dev
но что, если уже есть указанная ветка,dev
вместо того, чтобы проверять эту папку, она откроет эту ветку. Чтобы избежать этого, я бы предпочелgit checkout -- dev
.Теперь здесь пустое двойное тире обозначает текущую ветку и запрашивает у git папку
dev
из текущей выбранной ветки.Точно так же, если я это сделаю,
git checkout alpha dev
он вытащит папку dev из альфа-ветки.Это ответ на ваш первый вопрос: «git checkout действительно означает».
источник
«Чтобы проверить» означает, что вы берете любую данную фиксацию из репозитория и воссоздаете состояние связанного файла и дерева каталогов в рабочем каталоге.
Когда вы проверяете фиксацию, которая не является головкой ветки (например
git checkout HEAD~2
), вы находитесь на так называемой отдельной головке. Здесь вы можете создавать коммиты, но как только вы переключитесь на другую ветку, эти коммиты не будут восстановлены по имени ветки и могут даже быть удалены сборщиком мусора через некоторое время.источник