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

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

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

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

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

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

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

13 ответов

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

git checkout -b <branch>

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

git push -u origin <branch>

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

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

Это приведет к нажатию всех ваших ветвей на удаленный сервер и --set-upstream отслеживание правильно для вас:

git push --all -u

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

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

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

git branch <branch-name>

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

git push -u origin <branch-name>
97
ответ дан 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:

введите описание изображения здесь

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

изменить Устаревшие, просто используйте git push -u origin $BRANCHNAME


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

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

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

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

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

git checkout -b <new_branch>

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

git push -u origin <new_branch>

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

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

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

git push -u origin localBranch:remoteBranchToBeCreated

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

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

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

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

5
ответ дан 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, пример: функция)

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

Немного опираясь на ответы здесь, я завершил этот процесс как простой bash script, который, конечно же, можно было бы использовать как псевдоним 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

function old()
{
  git push --set-upstream origin $BRANCH
  git push
}

git push -u origin $BRANCH
0
ответ дан Brad Parks 21 апр. '17 в 16:30
источник поделиться

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

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

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