Что на самом деле означает git checkouts?
каковы checkouts в git?
Я знаю, как только вы делаете checkout к определенной ветви,HEAD указывает на эту ветвь. Но что это значит на самом деле? Значит ли это, что я могу работать на этой ветке? Если да, то, не проверяя ветку, я не могу работать над ней?
кроме того, что значит remote checkout В смысле? Как это полезно?
3 ответа:
как вы заметили,
HEAD- это метка, отмечающая, где вы находитесь в дереве фиксации. Он движется вместе с вами, когда вы переходите от одного коммита к другому.git checkout <commit>является основным механизмом для перемещения в дереве фиксации, перемещая фокус (HEAD) к указанной фиксации.фиксация может быть задана любым из нескольких способов, хэш фиксации, имя ветви, имя тега, относительный синтаксис (
HEAD^,HEAD~1и т. д.) и так далее. Часто бывает полезно рассмотреть возможность изменения проверки ветви, и есть некоторые параметры, которые работают с этой точки зрения, но все они ссылаются на коммиты.для проверки фиксации есть некоторые побочные эффекты, отличные от перемещения
HEADвокруг.
- рабочий каталог обновляется до состояния извлеченной фиксации.
- если указано имя ветви, checkout делает эту ветвь активной. Активная ветвь будет перемещаться вместе с любыми новыми коммитами, которые будут добавлены.
- С
-bопция новая ветвь будет создана на основе текущей фиксации, а затем активирована.- С
--trackопция извлеченная ветвь может быть осведомлена об удаленной ветви- С
--orphanопция создается новая ветка (например, с-b) но не будет основываться на какой-либо существующей фиксации.есть еще несколько вариантов, о которых вы можете прочитать в git checkout man-page, все из которых вращаются вокруг перемещения от одного фиксации к другому - просто меняется в том, какой эффект это движение имеет в дополнение к перемещению
HEAD.
"чтобы проверить" означает, что вы берете любую данную фиксацию из репозитория и повторно создаете состояние связанного файла и дерева каталогов в рабочем каталоге.
когда вы проверяете фиксацию, которая не отделение головы (например,
git checkout HEAD~2), вы находитесь на так называемой отдельно стоящее головы. Вы можете создавать коммиты здесь, но как только вы переключитесь на другую ветвь, эти коммиты не будут восстанавливаться по имени ветви и могут даже быть удалены сборщик мусора через некоторое время.
позвольте мне объяснить некоторые случаи использования checkout с файлом, папкой и ветвями, чтобы это могло быть полезно для понимания.
Допустим у нас есть папка с именем
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 действительно означает".