Как я могу легко направить локальную ветвь Git на удаленный доступ с другим именем?

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

Например:

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

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

$ git pull

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

$ git push

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

% git push origin newb:remote_branch_name

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

Ответ 1

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

git config push.default upstream

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

Ответ 2

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

git push -u origin my_branch:remote_branch

Последующие нажатия будут идти туда, где вы хотите.

EDIT:

В соответствии с комментарием, это только устанавливает pull.

git branch --set-upstream

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

Ответ 3

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

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

чтобы установить верхнюю ветвь от my_local_branch до origin/my_remote_branch.

Ответ 4

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

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

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

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