Як перемістити новий локальний гілка в віддалений репозиторій Git і відстежувати його?
Я хочу мати можливість зробити наступне:
Створіть локальну гілка на основі будь-якої іншої (віддаленої або локальної) гілки (через
git branch
абоgit checkout -b
)Натисніть локальну гілка в віддалений репозиторій (публікація), але зробіть це тому
git pull
іgit push
працюватимуть негайно.
Як це зробити?
Я знаю про --set-upstream
в Git 1.7, але це дію після створення. Я хочу знайти спосіб зробити аналогічні зміни при натисканні гілки на віддалений репозиторій.
У 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
.
$ 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>
Щоб перемістити його в репозиторій віддалений, виконайте наступні дії:
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
ПРИМІТКА. . Я припускаю, що у вас працює ваш сервер. Якщо це не так, це не спрацює. Гарне практичне керівництво тут .
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
Я просто роблю
git push -u origin localBranch:remoteBranchToBeCreated
над уже клонованою проектом.
Git створює нову гілку з ім'ям remoteBranchToBeCreated
під моїми remoteBranchToBeCreated
я зробив в localBranch
.
редагувати застарілі, просто використовувати git push -u origin $BRANCHNAME
Використовуйте git publish-branch
з Вільяма різних інструментів Git ( gitorious repo і clone ).
Добре, немає Ruby, тому - ігноруючи запобіжні заходи! - візьміть останні три рядки скрипта і створіть скрипт bash, git-publish-branch
:
19
Щоб створити нову гілку, відокремивши її від існуючої гілки
git checkout -b <new_branch>
а потім натисніть цю нову гілку в сховище, використовуючи
git push -u origin <new_branch>
Це створює і штовхає все локальні коммітов до новоствореної віддаленої гілці origin/<new_branch>
Я зробив псевдонім, так що всякий раз, коли я створюю нову гілку, вона буде відповідним чином видаляти і відстежувати віддалений гілка. Я розміщую наступний фрагмент в файл .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
- це моє нове ім'я гілки.
Для версії 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} eg 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
to the origin$ 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} eg 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} eg 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
to the originfunction 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} eg 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
the originfunction 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} eg 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
Щоб завантажити локальну гілка загальнодоступного сховища, вам потрібно cd
відкрити загальний репозиторій, а потім використовувати наступний код:
git push -u origin branchname
Інші питання по мітках git git-branch git-push repository або Задайте питання