Как вытащить удаленную ветку из чужого РЕПО
У меня есть проект, размещенный на 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>