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



Я хочу быть в состоянии сделать следующее:




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


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



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



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

2391   13  

13 ответов:

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

git checkout -b <branch>

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

git push -u origin <branch>

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

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

git push --all -u

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

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

до 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

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

git branch <branch-name>

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

    The -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 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.

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


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

хорошо, нет Рубин, так что-игнорируя гарантии! - взять последние три строки скрипта и создайте 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>

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

# 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, пример: feature)

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

Comments

    Ничего не найдено.