Как переместить новый локальный ветвь в удаленный репозиторий Git и отслеживать его?
Я хочу иметь возможность сделать следующее:
-
Создайте локальную ветвь на основе какой-либо другой (удаленной или локальной) ветки (через git branch
или git checkout -b
)
-
Нажмите локальную ветвь
в удаленный репозиторий (публикация), но сделайте это
поэтому git pull
и git push
будут работать немедленно.
Как это сделать?
Я знаю о --set-upstream
в Git 1.7, но это действие после создания. Я хочу найти способ сделать аналогичные изменения при нажатии ветки на удаленный репозиторий.
Ответы
Ответ 1
В Git 1.7.0 и более поздних версиях вы можете проверить новую ветку:
git checkout -b <branch>
Редактирование файлов, добавление и фиксация. Затем нажмите с опцией -u
(сокращение от --set-upstream
):
git push -u origin <branch>
Git будет настраивать информацию отслеживания во время нажатия.
Ответ 2
Если вы не делитесь своим репо с другими пользователями, это полезно для того, чтобы выталкивать все ваши ветки на удаленный, и --set-upstream
правильно для вас:
git push --all -u
(Не совсем то, о чем просил OP, но этот однострочный интерфейс довольно популярен)
Если вы делитесь своим репо с другими, это не очень хорошая форма, так как вы будете забивать репо всеми вашими изворотливыми экспериментальными ветвями.
Ответ 3
До введения 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
Ответ 4
Проще говоря, чтобы создать новую ветвь локальная, выполните:
git branch <branch-name>
Чтобы переместить его в репозиторий удаленный, выполните следующие действия:
git push -u origin <branch-name>
Ответ 5
Небольшая вариация уже предложенных решений:
-
Создайте локальную ветвь на основе какой-либо другой (удаленной или локальной) ветки:
git checkout -b branchname
-
Нажмите локальную ветвь в удаленный репозиторий (опубликуйте), но сделайте ее отслеживаемой, так что git pull
и git push
будут работать немедленно
git push -u origin HEAD
Использование HEAD
- это "удобный способ перевести текущую ветку на одно и то же имя на пульте дистанционного управления". Источник: https://git-scm.com/docs/git-push В терминах Git HEAD (в верхнем регистре) является ссылкой на верхнюю часть текущей ветки (дерева).
Опция -u
является лишь короткой для --set-setupstream
. Это добавит ссылку отслеживания восходящего потока для текущей ветки. вы можете проверить это, посмотрев в файле.git/config:
Ответ 6
Я просто делаю
git push -u origin localBranch:remoteBranchToBeCreated
над уже клонированным проектом.
Git создает новую ветку с именем remoteBranchToBeCreated
под моими коммитами, которые я сделал в localBranch
.
Изменить: это изменит текущую локальную ветвь (возможно, с именем localBranch
) вверх по течению на origin/remoteBranchToBeCreated
. Чтобы это исправить, просто наберите:
git branch --set-upstream-to=origin/localBranch
Итак, ваш текущий локальный филиал отслеживает origin/localBranch
назад.
Ответ 7
Я предполагаю, что вы уже клонировали проект, например:
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
Ответ 8
редактировать устаревшие, просто использовать 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 обычно является источником (вы можете изменить сценарий, чтобы взять начало по умолчанию и т.д.)
Ответ 9
Чтобы создать новую ветвь путем ветки от существующей ветки
git checkout -b <new_branch>
а затем нажмите эту новую ветку в хранилище, используя
git push -u origin <new_branch>
Это создает и помещает все локальные коммиты во вновь созданный источник удаленной ветки origin/<new_branch>
Ответ 10
Для версии GitLab до 1.7 используйте:
git checkout -b name_branch
(name_branch, ex: master
)
Чтобы отправить его в удаленный репозиторий, выполните:
git push -u origin name_new_branch
(name_new_branch, пример: feature
)
Ответ 11
Я сделал псевдоним, так что всякий раз, когда я создаю новую ветку, она будет соответствующим образом удалять и отслеживать удаленный ветвь. Я помещаю следующий фрагмент в файл .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
- это мое новое имя ветки.
Ответ 12
Немного опираясь на ответы здесь, я обернул этот процесс в простой сценарий 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
Ответ 13
Вы можете сделать это за 2 шага:
1. Используйте checkout
для создания локальной ветки:
git checkout -b yourBranchName
Работайте со своей веткой так, как хотите.
2. Используйте команду push
, чтобы автоматически создать ветку и отправить код в удаленный репозиторий:
git push -u origin yourBanchName
Есть несколько способов сделать это, но я думаю, что этот способ действительно прост.
Ответ 14
Чтобы загрузить локальную ветвь общедоступного репозитория, вам нужно cd
открыть общий репозиторий, а затем использовать следующий код:
git push -u origin branchname