Как вытащить удаленную ветку из чужого РЕПО


У меня есть проект, размещенный на GitHub, который кто-то раскошелился. На своей вилке они создали новую ветку " foo " и внесли некоторые изменения. Как мне вытащить их " foo "в новую ветку, также называемую" foo " в моем РЕПО?

Я понимаю, что они могут отправить запрос на вытягивание мне, но я хотел бы сам инициировать этот процесс.

предположить следующее:

  1. потому что они разветвили мой проект, оба наших репозитория разделяют одно и то же 'история'
  2. хотя GitHub показывает, что их проект был разветвлен от моего, мой локальный репозиторий не имеет никаких ссылок на проект этого человека. Мне нужно добавить их в качестве пульта дистанционного управления?
  3. у меня еще нет ветки под названием "foo" - не знаю, нужно ли мне сначала вручную создать это или что.
  4. Я определенно хочу, чтобы это потянуло в отдельную ветку, а не мой мастер.

Я надеюсь, что это имеет какой-то смысл.

3 189

3 ответа:

git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

это установит локальную ветку foo отслеживание удаленной ветки coworker/foo. Поэтому, когда ваш коллега внес некоторые изменения, вы можете легко вытащить их:

git checkout foo
git pull

ответ на комментарий:

круто :) и если я хотел бы сделать свой собственный изменения в этой ветке, должен ли я создать вторую местного отделения-бар "" от "фу" и работать там вместо прямо на моем "фу"?

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

git branch --set-upstream foo colin/foo

предполагая, что colin ваш репозиторий (удаленный для вашего репозитория сотрудников) определен аналогичным образом:

git remote add colin git://path/to/colins/repo.git

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

схватив их совершает:

git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch

это создает локальную ветку с именем ournameforbranch что в точности совпадает с тем, что theirbranch для них. Для примера вопроса последним аргументом будет foo:foo.

Примечание :ournameforbranch часть можно еще больше оставить, если придумать имя, которое не конфликтует с одним из ваших собственных филиалы является надоедливым. В этом случае ссылка называется FETCH_HEAD доступно. Вы можете git log FETCH_HEAD чтобы увидеть их коммиты, то делать такие вещи, как cherry-picked чтобы вишня забрать свои коммиты.

толкая его обратно к ним:

часто, вы хотите исправить что-то из их и отодвинуть его обратно. Это тоже возможно:

git fetch git@github.com:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push git@github.com:theirusername/reponame.git HEAD:theirbranch

если работает в отдельно стоящее государства беспокоит вас, во что бы то ни стало создать ветку с помощью :ournameforbranch и заменить FETCH_HEAD и HEAD выше ournameforbranch.

Если ответ антака:

git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH> 

дает вам:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

затем (следуя совету Пшемека D) используйте

git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>