Как удалить удаленную ветку из другого репо
У меня есть проект, размещенный на GitHub, который кто-то разветвлял. На своей вилке они создали новую ветку "foo" и внесли некоторые изменения. Как мне перенести их "foo" в новую ветку, также называемую "foo" в моем репо?
Я понимаю, что они могли бы отправить мне запрос на удаление, но я бы хотел сам начать этот процесс.
Предположим следующее:
- Поскольку они раздвоили мой проект, оба наших репо имеют одинаковую "историю"
- Хотя GitHub показывает, что их проект был разветвлен у меня, мой локальный репозиторий не имеет никаких ссылок на этот личный проект. Нужно ли добавлять их как удаленный?
- У меня пока нет ветки с именем "foo" - я не знаю, нужно ли мне сначала создавать это вручную.
- Я определенно хочу, чтобы это вытащили в отдельную ветку, а не моего мастера.
Ответы
Ответ 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:
- Прокрутите вниз до пиара, чтобы увидеть кнопку
Merge
или Squash and merge
- Нажмите на ссылку справа:
view command line instructions
- Нажмите значок "Копировать" справа от шага 1
- Вставьте команды в свой терминал