я только что сделал
git fetch origin <remoteBranch>
И после этого я просто сделал
git checkout <remoteBranch>
Это создало локальную ветку с именем <remoteBranch>
.
Как это работает? Обычно, когда я хочу создать локальную ветку, мне нужно сделать
git checkout -b
Насколько мне известно, когда вы запрашиваете проверку, если ветка не существует локально, git попытается найти одну (и только одну) удаленную ветку с таким именем. Если он существует и есть один (в вашем репозитории может быть несколько удаленных устройств с одним и тем же именем ветки), то git догадывается, что это ветка, которую вы хотите, и поэтому создает ее локально, используя удаленную ветку в качестве восходящей ветки.
Верно. Это не удастся. Точное текстовое сообщение? Что-то вроде ветки не существует.
В документации (или, по крайней мере, в источнике) это называется «DWIM», что означает «Делай, что я имею в виду»: git checkout asdf
=> git checkout -b asdf origin/asdf --track
, по умолчанию, при условии, что есть только одно совпадение origin/asdf
и нет текущего asdf
.
руководство для кассы говорит:
git checkout <branch>
[...]If
<branch>
is not found but there does exist a tracking branch in exactly one remote (call it<remote>
) with a matching name, treat as equivalent to$ git checkout -b <branch> --track <remote>/<branch>
If the branch exists in multiple remotes and one of them is named by the checkout.defaultRemote configuration variable, we’ll use that one for the purposes of disambiguation, even if the
<branch>
isn’t unique across all remotes. Set it to e.g. checkout.defaultRemote=origin to always checkout remote branches from there if<branch>
is ambiguous but exists on the origin remote. See also checkout.defaultRemote in git-config[1].
что означает "ветвь отслеживания"?
@Honey: это ветка, отслеживающая состояние удаленного репо. Другими словами: что git branch -r
показывает вам.
Я вижу кучу удаленных веток. Единственное отличие: origin/HEAD -> origin/develop
. Почему этот другой? Также означает ли это, что я отслеживаю все эти ветки, как если бы я это делал git fetch --all
, тогда он будет извлекать/обновлять каждую из них?
@Honey: origin/HEAD
- это не простая ссылка (т.е. не указывает на фиксацию напрямую), а символическая ссылка - точно так же, как HEAD
в ВАШЕМ клоне. Он используется как ветка по умолчанию после git clone
для оформления заказа. До последнего Q: git fetch
будет управлять этими ветками. git fetch --all
просто извлекает все пульты, а не только один.
Только что узнал, что это работает так же для git pull
. Очевидно, что поскольку git pull
также содержит git fetch
, то аналогичным образом вы можете сделать git pull
, а затем git checkout <newBranch>
, и git автоматически создаст и проверит ветку для вас локально.
так что если есть несколько пультов с таким именем, то это просто не удастся? На что это похоже?