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

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

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

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

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

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

13 ответов


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

git checkout -b <branch>

редактировать файлы, добавлять и совершить. Тогда пуш -u (сокращенно --set-upstream):

git push -u origin <branch>

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


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

git push --all -u

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

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


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

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

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

можно использовать 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

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

git branch <branch-name>

чтобы подтолкнуть его к пульт ДУ репозиторий, do:

git push -u origin <branch-name>

небольшое изменение решений, уже приведенных здесь:

  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


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

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
    

Примечание: я предполагаю, что у вас есть ваш сервер работает. Если нет, это не сработает. Хороший способ-это здесь.

добавил

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

git push origin master:new_feature_name

проверьте, все ли хорошо (fetch origin и список удаленных ветвей):

git fetch origin
git branch -r

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

git checkout -tb new_feature_name origin/new_feature_name

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

git pull

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

git push -u origin localBranch:remoteBranchToBeCreated

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

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


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


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

хорошо, нет Рубина, поэтому-игнорирование гарантий! - взять последние три строки скрипта и создайте bash-скрипт, git-publish-branch:

#!/bin/bash
REMOTE= # Rewrite this to make it optional...
BRANCH=
# 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 обычно является origin (вы можете изменить сценарий, чтобы принять origin по умолчанию, так далее...)


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

git checkout -b <new_branch>

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

git push -u origin <new_branch>

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


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

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

использование: просто наберите gcb thuy/do-sth-kool С thuy/do-sth-kool - Это мое новое имя филиала.


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

git checkout -b name_branch

(name_branch, ex :master)

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

git push -u origin name_new_branch

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


основываясь немного на ответах здесь, я завернул этот процесс в простой скрипт 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 "" ]
then
  show_help
fi

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

git push -u origin $BRANCH

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

git push -u origin branchname