Как вытащить удаленную ветку из чужого РЕПО
У меня есть проект, размещенный на GitHub, который кто-то раскошелился. На своей вилке они создали новую ветку " foo " и внесли некоторые изменения. Как мне вытащить их " foo "в новую ветку, также называемую" foo " в моем РЕПО?
Я понимаю, что они могут отправить запрос на вытягивание мне, но я хотел бы сам инициировать этот процесс.
предположить следующее:
- потому что они разветвили мой проект, оба наших репозитория разделяют одно и то же 'история'
- хотя GitHub показывает, что их проект был разветвлен от моего, мой локальный репозиторий не имеет никаких ссылок на проект этого человека. Мне нужно добавить их в качестве пульта дистанционного управления?
- у меня еще нет ветки под названием "foo" - не знаю, нужно ли мне сначала вручную создать это или что.
- Я определенно хочу, чтобы это потянуло в отдельную ветку, а не мой мастер.
Я надеюсь, что это имеет какой-то смысл.
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>