it-roy-ru.com

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

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

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

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

Как я могу это сделать?

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

3990
Roni Yaniv

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

git checkout -b <branch>

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

git Push -u Origin <branch>

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

6217
Daniel Ruoso

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

git Push --all -u

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

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

470
ErichBSchulz

До появления 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
142
Lohrun

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

git branch <branch-name>

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

git Push -u Origin <branch-name>
121
piyushmandovra

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

  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

81
bg17aw

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

git Push -u Origin localBranch:remoteBranchToBeCreated

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

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

34
Arda

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

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
    

ПРИМЕЧАНИЕ: Я предполагаю, что ваш сервер запущен и работает. Если это не так, это не сработает. Хорошие инструкции здесь .

ADDED

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

git Push Origin master:new_feature_name

Проверьте, все ли хорошо (извлеките Origin и перечислите удаленные ветки):

git fetch Origin
git branch -r

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

git checkout -tb new_feature_name Origin/new_feature_name

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

git pull
30
VP.

edit Устаревший, просто используйте git Push -u Origin $BRANCHNAME


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

ОК, нет Руби, так что - игнорируем гарантии! - взять последние три строки скрипта и создать скрипт 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 обычно является Origin (вы можете изменить скрипт, чтобы он по умолчанию принимал Origin и т.д.)

23
Tobias Kienzler

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

git checkout -b <new_branch>

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

git Push -u Origin <new_branch>

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

21
cptjack

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

git checkout -b name_branch

(name_branch, например: master)

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

git Push -u Origin name_new_branch

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

11
Fadid

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

9
Thuy Trinh

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