Вопрос: Git fetch удаленная ветка


Мой коллега и я работаем над одним и тем же хранилищем, мы разветвляли его по двум направлениям, каждый из которых был технически для разных проектов, но они имеют сходство, поэтому мы иногда захотим вернуться к * мастеру из филиала.

Однако у меня есть филиал. Мой вопрос в том, как мой коллега может специально отвести эту ветвь? git cloneрепо, похоже, не создает для него локальные филиалы, хотя я могу видеть, как они живут без колебаний после толчка на моем конце.

Кроме того, когда я изначально сделал филиал, я сделал -b checkout, Не уверен, что это имеет большое значение?

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

Это команды, которыми я управлял. Но это определенно не работает. Я хочу, чтобы иметь возможность проверить эту ветку, а затем нажать и отменить только ветви изменения от разных сотрудников или рабочих станций.


1566


источник


Ответы:


Вам нужно создать локальную ветвь, отслеживающую удаленную ветку. Следующая команда создаст локальную ветвь с именем daves_branch , отслеживание удаленной ветви Происхождение / daves_branch , Когда вы нажмете свои изменения, удаленная ветка будет обновлена.

Для большинства версий git:

git checkout --track origin/daves_branch

--trackявляется сокращением для git checkout -b [branch] [remotename]/[branch]где [remotename] происхождения в этом случае и [ветвь] в два раза больше, daves_branch в этом случае.

Для git 1.5.6.5 вам понадобилось следующее:

git checkout --track -b daves_branch origin/daves_branch

Для git 1.7.2.3 и выше этого достаточно (возможно, началось раньше, но это самое раннее подтверждение, которое я смог найти быстро):

git checkout daves_branch

Обратите внимание, что с недавними версиями git эта команда не создаст локальную ветвь и поместит вас в состояние «отдельно стоящего HEAD». Если вы хотите использовать локальную ветвь, используйте --trackвариант. Полная информация здесь: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches


2169



я использовал fetchс последующим checkout...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... где <rbranch>является удаленной ветвью или ссылка источника а также <lbranch>пока еще не существует местный филиал или пункт назначения ref вы хотите отслеживать и которые, вероятно, хотите назвать так же, как удаленная ветвь или источник ref. Это объясняется в опции в объяснении <refspec>,

Git настолько умный, что он автоматически завершает первую команду, если я табуляция после первых нескольких букв удаленной ветви. IE: Мне даже не нужно указывать локальную ветвь, Git автоматически копирует имя удаленной ветви для меня. Спасибо, Гит!

Также как ответ в этой аналогичной должности SO показывает, если вы не называете локальную ветвь в fetch, вы все равно можете создать его, когда вы проверите его, используя -bфлаг. IE: git fetch <remote> <branch>с последующим git checkout -b <branch> <remote>/<branch>делает то же самое, что и мой первоначальный ответ. И, очевидно, если ваше репо единственный удаленный, то вы можете просто сделать git checkout <branch>после fetchи он создаст для вас локальную ветку. НАПРИМЕР: Вы просто клонировали репо и хотите проверить дополнительные ветки с пульта.

Я считаю, что часть документации для fetchвозможно, были скопированы дословно из pull, В частности, раздел о <refspec>в опции та же. Однако я не считаю, что fetchбудет когда-либо merge, так что, если вы оставите сторону адресата двоеточия пустым fetch ничего не делать ,

Обратите внимание, что git fetch <remote> <refspec>сокращается для git fetch <remote> <refspec>:что, следовательно, ничего не даст, но git fetch <remote> <tag>такой же как git fetch <remote> <tag>:<tag>который должен скопировать <tag>на местном уровне.

Я думаю, это полезно только в том случае, если вы хотите скопировать удаленный филиал локально, но не обязательно сразу же проверить его. В противном случае я теперь буду использовать принятый ответ выше , что подробно объясняется в первом разделе описание заказа а затем в опции раздела под разъяснением --track, так как это 1-лайнер. Что ж... вроде 1-лайнера, потому что вы все еще должны бежать git fetch <remote>первый.

FYI: порядок <refspecs>(источник: пункт назначения) объясняет причудливый метод до Git-1.7 для удаление удаленных филиалов , IE: Не нажимайте ничего в пункт назначения refspec.


728



Если вы пытаетесь «проверить» новую удаленную ветку (которая существует только на удаленном, но не локальном), вот что вам понадобится:

git fetch origin
git checkout --track origin/<remote_branch_name>

Предполагается, что вы хотите происхождения , Если нет, замените происхождения По вашему дистанционный пульт имя.


259



To checkout myBranch that exists remotely and not a locally - This worked for me:

git fetch --all
git checkout myBranch

I got this message:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

87



Use git branch -a (both local and remote branches) or git branch -r (only remote branches) to see all the remotes and their branches. You can then do a git checkout -t remotes/repo/branch to the remote and create a local branch.

There is also a git ls-remote command to see all the refs and tags for that remote.


34



The title and the question are confused:

  • Git fetch remote branch
  • how can my colleague pull that branch specifically.

If the question is how can I get a remote branch to work with or how to git checkout a remote branch, a simpler solution is:

With git (>= 1.6.6) you are able to use:

git checkout <branch_name>

If local <branch_name> is not found but there does exist a tracking branch in exactly one remote with a matching name, treat as equivalent to:

git checkout -b <branch_name> --track <remote>/<branch_name>

see documentation for git checkout

For your friend:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

33



git checkout -b serverfix origin/serverfix

This is a common enough operation that git provides the --track shorthand:

git checkout --track origin/serverfix

In fact, this is so common that there’s even a shortcut for that shortcut. If the branch name you’re trying to checkout (a) doesn’t exist and (b) exactly matches a name on only one remote, Git will create a tracking branch for you:

git checkout serverfix

To set up a local branch with a different name than the remote branch, you can easily use the first version with a different local branch name:

git checkout -b sf origin/serverfix

Now, your local branch sf will automatically pull from origin/serverfix.

Source: Pro Git 2nd Edition, written by Scott Chacon and Ben Straub (cut for readability)


22



git fetch

git branch -r

git checkout <branch_name>

12



You can fetch and checkout the remote branch in one shot too:-

git fetch && git checkout the-branch-name

10