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

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

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

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

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

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

Ответ 1

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

git checkout -b <branch>

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

git push -u origin <branch>

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

Ответ 2

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

git push --all -u

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

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

Ответ 3

До введения 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

Ответ 4

Проще говоря, чтобы создать новую ветвь локальная, выполните:

git branch <branch-name>

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

git push -u origin <branch-name>

Ответ 5

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

  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

Ответ 6

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

git push -u origin localBranch:remoteBranchToBeCreated

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

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

Изменить: это изменит текущую локальную ветвь (возможно, с именем localBranch) вверх по течению на origin/remoteBranchToBeCreated. Чтобы это исправить, просто наберите:

git branch --set-upstream-to=origin/localBranch

Итак, ваш текущий локальный филиал отслеживает origin/localBranch назад.

Ответ 7

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

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

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

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

    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

Ответ 8

редактировать устаревшие, просто использовать git push -u origin $BRANCHNAME


Используйте git publish-branch из Уильяма разных инструментов Git (gitorious repo и clone).

Хорошо, нет Ruby, поэтому - игнорируя меры предосторожности! - возьмите последние три строки скрипта и создайте скрипт bash, 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}

Затем запустите git-publish-branch REMOTENAME BRANCHNAME, где REMOTENAME обычно является источником (вы можете изменить сценарий, чтобы взять начало по умолчанию и т.д.)

Ответ 9

Чтобы создать новую ветвь путем ветки от существующей ветки

git checkout -b <new_branch>

а затем нажмите эту новую ветку в хранилище, используя

git push -u origin <new_branch>

Это создает и помещает все локальные коммиты во вновь созданный источник удаленной ветки origin/<new_branch>

Ответ 10

Для версии GitLab до 1.7 используйте:

git checkout -b name_branch

(name_branch, ex: master)

Чтобы отправить его в удаленный репозиторий, выполните:

git push -u origin name_new_branch

(name_new_branch, пример: feature)

Ответ 11

Я сделал псевдоним, так что всякий раз, когда я создаю новую ветку, она будет соответствующим образом удалять и отслеживать удаленный ветвь. Я помещаю следующий фрагмент в файл .bash_profile:

# Create a new branch, push to origin and track that remote branch
publishBranch() {
  git checkout -b $1
  git push -u origin $1
}
alias gcb=publishBranch

Использование: просто введите gcb thuy/do-sth-kool с помощью thuy/do-sth-kool - это мое новое имя ветки.

Ответ 12

Немного опираясь на ответы здесь, я обернул этот процесс в простой сценарий Bash, который, конечно же, можно использовать и в качестве псевдонима Git.

Важным дополнением для меня является то, что это побуждает меня запускать модульные тесты перед фиксацией и по умолчанию передает текущее имя ветки.

$ git_push_new_branch.sh

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_push_new_branch           -> Displays prompt reminding you to run unit tests
  git_push_new_branch OK        -> Pushes the current branch as a new branch to the origin
  git_push_new_branch MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

git_push_new_branch.sh

function show_help()
{
  IT=$(cat <<EOF

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_push_new_branch.sh           -> Displays prompt reminding you to run unit tests
  git_push_new_branch.sh OK        -> Pushes the current branch as a new branch to the origin
  git_push_new_branch.sh MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

  )
  echo "$IT"
  exit
}

if [ -z "$1" ]
then
  show_help
fi

CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$1" == "OK" ]
then
  BRANCH=$CURR_BRANCH
else
  BRANCH=${1:-$CURR_BRANCH}
fi

git push -u origin $BRANCH

Ответ 13

Вы можете сделать это за 2 шага:

1. Используйте checkout для создания локальной ветки:

git checkout -b yourBranchName

Работайте со своей веткой так, как хотите.

2. Используйте команду push, чтобы автоматически создать ветку и отправить код в удаленный репозиторий:

git push -u origin yourBanchName

Есть несколько способов сделать это, но я думаю, что этот способ действительно прост.

Ответ 14

Чтобы загрузить локальную ветвь общедоступного репозитория, вам нужно cd открыть общий репозиторий, а затем использовать следующий код:

git push -u origin branchname