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


Я хочу иметь возможность сделать следующее:

  1. Создайте локальную ветвь на основе какой-либо другой (удаленной или локальной) ветви (через git branchили git checkout -b)

  2. Нажмите локальную ветвь в удаленный репозиторий (публикация), но сделайте это отслеживается так git pullа также git pushбудет работать немедленно.

Как мне это сделать?

Я знаю о --set-upstreamв Git 1.7, но это действие после создания. Я хочу найти способ сделать аналогичные изменения при нажатии ветки в удаленный репозиторий.


3596


источник


Ответы:


В Git 1.7.0 и более поздних версиях вы можете проверить новую ветку:

git checkout -b <branch>

Редактирование файлов, добавление и фиксация. затем нажимать -u(Короче для --set-upstream) опция:

git push -u origin <branch>

Git будет настраивать информацию отслеживания во время нажатия.


5660



Если вы не делитесь своим репо с другими, это полезно для все ваши ветви на пульте дистанционного управления и --set-upstreamправильно отслеживание:

git push --all -u

(Не совсем то, о чем просил OP, но этот однострочный интерфейс довольно популярен)

Если вы делитесь своим репо с другими, это не очень хорошая форма, так как вы будете забивать репо всеми вашими изворотливыми экспериментальными ветвями.


445



До введения git push -u, не было git pushвозможность получить то, что вы желаете. Вам нужно было добавить новые инструкции конфигурации.

Если вы создаете новую ветку, используя:

$ git checkout -b branchB
$ git push origin branchB:branchB

Вы можете использовать git config, чтобы избежать прямого редактирования .git/configфайл.

$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB

Или вы можете вручную отредактировать .git/configфайл для отслеживания информации в этой ветке.

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB

130



Проще говоря, чтобы создать новый местный ветвь, do:

git branch <branch-name>

Чтобы подтолкнуть его к дистанционный пульт хранилище, выполните:

git push -u origin <branch-name>

109



Небольшая вариация уже предложенных решений:

  1. Создайте локальную ветвь на основе какой-либо другой (удаленной или локальной) ветви:

    git checkout -b branchname
    
  2. Нажмите локальную ветвь в удаленный репозиторий (опубликуйте), но сделайте ее отслеживаемой, чтобы git pullа также git pushбудет работать незамедлительно

    git push -u origin HEAD
    

    С помощью HEADявляется «удобным способом нажимать текущую ветвь на одно и то же имя на пульте дистанционного управления». Источник: https://git-scm.com/docs/git-push В терминах Git HEAD (в верхнем регистре) является ссылкой на верхнюю часть текущей ветви (дерева).

    -uвариант просто короткий для --set-setupstream, Это добавит ссылку отслеживания восходящего потока для текущей ветви. вы можете проверить это, посмотрев в файле .git / config:

    Enter image description here


54



Я полагаю, что вы уже клонировали проект, например:

git clone http://github.com/myproject.git
  1. Затем в вашей локальной копии создайте новую ветку и проверьте ее:

    git checkout -b <newbranch>
    
  2. Предположим, что вы создали «git bare -init» на своем сервере и создали myapp.git, вы должны:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. После этого пользователи должны иметь возможность

    git clone http://example.com/var/git/myapp.git
    

ЗАМЕТКА: Я предполагаю, что у вас работает ваш сервер. Если это не так, это не сработает. Хорошее практическое руководство Вот ,

ADDED

Добавить удаленную ветку:

git push origin master:new_feature_name

Проверьте, все ли хорошо (выберите источник и укажите удаленные ветви):

git fetch origin
git branch -r

Создайте локальную ветвь и отследите удаленную ветку:

git checkout -tb new_feature_name origin/new_feature_name

Обновить все:

git pull

26



Я просто делаю

git push -u origin localBranch:remoteBranchToBeCreated

над уже клонированным проектом.

Git создает новую ветвь с именем remoteBranchToBeCreatedпод моими обязательствами, которые я сделал в localBranch,


21



edit Outdated, just use git push -u origin $BRANCHNAME


Use git publish-branch from William's miscellaneous Git tools (gitorious repo and clone).

OK, no Ruby, so - ignoring the safeguards! - take the last three lines of the script and create a bash script, git-publish-branch:

#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}

Then run git-publish-branch REMOTENAME BRANCHNAME, where REMOTENAME is usually origin (you may modify the script to take origin as default, etc...)


19