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

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

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

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

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

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

3689
задан Roni Yaniv 04 мая '10 в 15:58
источник поделиться
13 ответов

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

git checkout -b <branch>

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

git push -u origin <branch>

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

5823
ответ дан Daniel Ruoso 03 июня '11 в 23:50
источник поделиться

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

git push --all -u

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

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

449
ответ дан ErichBSchulz 20 янв. '14 в 14:36
источник поделиться

До введения 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
133
ответ дан Lohrun 04 мая '10 в 16:03
источник поделиться

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

git branch <branch-name>

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

git push -u origin <branch-name>
111
ответ дан piyushmandovra 24 апр. '15 в 15:09
источник поделиться

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

  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

59
ответ дан bg17aw 05 июля '16 в 11:13
источник поделиться

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

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
27
ответ дан VP. 04 мая '10 в 16:04
источник поделиться

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

git push -u origin localBranch:remoteBranchToBeCreated

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

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

24
ответ дан Arda 20 марта '17 в 14:13
источник поделиться

редактировать устаревшие, просто использовать 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 обычно является источником (вы можете изменить сценарий, чтобы взять начало по умолчанию и т.д.)

19
ответ дан Tobias Kienzler 04 мая '10 в 16:03
источник поделиться

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

git checkout -b <new_branch>

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

git push -u origin <new_branch>

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

16
ответ дан cptjack 03 июня '15 в 23:36
источник поделиться

Я сделал псевдоним, так что всякий раз, когда я создаю новую ветку, она будет соответствующим образом удалять и отслеживать удаленный ветвь. Я помещаю следующий фрагмент в файл .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 - это мое новое имя ветки.

7
ответ дан Thuy Trinh 05 янв. '16 в 13:11
источник поделиться

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

git checkout -b name_branch

(name_branch, ex: master)

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

git push -u origin name_new_branch

(name_new_branch, пример: функция)

6
ответ дан Fadid 06 дек. '16 в 21:42
источник поделиться

Немного опираясь на ответы здесь, я завернул этот процесс как простой скрипт 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
1
ответ дан Brad Parks 21 апр. '17 в 16:30
источник поделиться

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

git push -u origin branchname
-8
ответ дан shankar kumar 26 июня '15 в 12:37
источник поделиться

Другие вопросы по меткам