Как удалить удаленную ветку из другого репо

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

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

Предположим следующее:

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

Ответ 1

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

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

Прохладный:) И если я хочу сделать свой собственный изменения в этой ветке, если я создать вторую локальную ветвь "bar" от "foo" и работать там вместо прямо на моем "foo"?

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

git branch --set-upstream foo colin/foo

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

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

Ответ 2

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

Захват своих коммитов:

git fetch [email protected]:theirusername/reponame.git theirbranch:ournameforbranch

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

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

Верните их обратно:

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

git fetch [email protected]:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push [email protected]:theirusername/reponame.git HEAD:theirbranch

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

Ответ 3

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

git fetch [email protected]:<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.

Затем (следуя совету Przemek D) используйте

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

Ответ 4

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

git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo 
git checkout --no-track protected_repo/foo

Теперь у вас есть локальная копия foo, без связанного с ней апстрима. Вы можете зафиксировать изменения в нем (или нет), а затем отправить свой файл в свое удаленное хранилище.

git push --set-upstream origin foo

Теперь foo находится в вашем репо на GitHub, и ваш локальный foo отслеживает его. Если они продолжают вносить изменения в foo, вы можете получить их и влить в свой foo.

git checkout foo 
git fetch protected_repo
git merge protected_repo/foo

Ответ 5

Ниже приведено хорошее целесообразное решение, которое работает с GitHub для проверки ветки PR с другого пользовательского форка. Вам нужно знать идентификатор запроса на удаление (который отображается в GitHub вместе с заголовком PR).

Пример:

Исправление вашего небезопасного кода # 8
Алиса хочет объединить 1 коммит в your_repo:master из her_repo:branch

git checkout -b <branch>
git pull origin pull/8/head

Замените ваш пульт, если он отличается от origin.
Замените 8 правильным ID запроса на получение.

Ответ 6

GitHub имеет новую опцию относительно предыдущих ответов, просто скопируйте/вставьте командные строки из PR:

  1. Прокрутите вниз до пиара, чтобы увидеть кнопку Merge или Squash and merge
  2. Нажмите на ссылку справа: view command line instructions
  3. Нажмите значок "Копировать" справа от шага 1
  4. Вставьте команды в свой терминал