Как я могу легко перенести локальную ветку Git на пульт с другим именем? - PullRequest
162 голосов
/ 21 апреля 2011

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

Например:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name

Теперь, если кто-то обновит имя_удаленного_ответа, я могу:

$ git pull

И все объединено / переадресовано.Однако, если я внесу изменения в свой локальный «новичок», я не смогу:

$ git push

Вместо этого я должен:

% git push origin newb:remote_branch_name

Кажется немного глупым.Если git-pull использует git-config branch.newb.merge, чтобы определить, из чего извлекать, почему git-push не может иметь подобную опцию конфигурации?Есть ли хороший способ для этого или я должен просто продолжить долгий путь?

Ответы [ 4 ]

155 голосов
/ 21 апреля 2011

Когда вы делаете начальный толчок, добавьте параметр -u :

git push -u origin my_branch:remote_branch

Последующие толчки пойдут туда, куда вы хотите.

EDIT:

Согласно комментарию, это только устанавливает тягу.

git branch --set-upstream

должен это сделать.

87 голосов
/ 21 апреля 2011

Конечно.Просто установите push.default на upstream, чтобы подтолкнуть ветви к их восходящим потокам (что совпадает с тем, что pull будет тянуть с, определенным branch.newb.merge), вместо того, чтобы выдвигать ветви к тем, которые совпадают по имени (по умолчаниюустановка для push.default, matching).

git config push.default upstream

Обратите внимание, что раньше это называлось tracking, а не upstream до Git 1.7.4.2, поэтому, если вы используете старую версиюGit, используйте вместо этого tracking.Опция push.default была добавлена ​​в Git 1.6.4, поэтому, если вы используете более старую версию, у вас ее вообще не будет, и вам нужно будет явно указать ветку, к которой нужно перейти.

14 голосов
/ 28 ноября 2014

Команда Адам устарела.Вы можете использовать:

git branch --set-upstream-to origin/my_remote_branch my_local_branch

для установки восходящей ветви my_local_branch в origin/my_remote_branch.

0 голосов
/ 14 августа 2015

Вот процесс, который сработал для меня.

git clone original-repo-url
git remote rename origin upstream
git remote add origin new-repo-url

Теперь ваш новый репо будет «origin», а оригинальный репо «upstream». Подтвердите это, запустив git remote -v. (Примечание: восходящий поток используется для извлечения из исходного репо - для того, чтобы синхронизировать локальную копию с проектом, в который вы хотите внести вклад, а источник используется для извлечения и продвижения, поскольку вы можете внести свой вклад в свое собственное репо).

git push origin master

Теперь мастер вашего нового удаленного репо (на Github) будет синхронизирован с оригинальным мастером, но у него не будет ни одной ветви функций.

git rebase upstream/branch-name
git push origin master

Rebase - это умное слияние. Затем снова нажмите на мастер, и вы увидите выбранную ветвь объектов как мастер на новом репо.

Дополнительно:

git remote rm upstream
git remote add upstream new-repo-url
...