Как переместить новую локальную ветвь в удаленный репозиторий Git и отслеживать ее?
Я хочу иметь возможность сделать следующее:
создайте локальную ветвь на основе какой-либо другой (удаленной или локальной) ветви (через
git branch
илиgit checkout -b
)нажмите локальную ветку в удаленный репозиторий (опубликовать), но сделать это отслеживается так
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>
небольшое изменение решений, уже приведенных здесь:
-
создайте локальную ветвь на основе какой-либо другой (удаленной или локальной) ветви:
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 строку:
Я полагаю, что вы уже склонировали проекта:
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
Примечание: я предполагаю, что у вас есть ваш сервер работает. Если нет, это не сработает. Хороший способ-это здесь.
добавил
добавить удаленную ветку:
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