Як перемістити новий локальний гілка в віддалений репозиторій Git і відстежувати його?

Я хочу мати можливість зробити наступне:

  • Створіть локальну гілка на основі будь-якої іншої (віддаленої або локальної) гілки (через git branch або git checkout -b )

  • Натисніть локальну гілка в віддалений репозиторій (публікація), але зробіть це тому git pull і git push працюватимуть негайно.

Як це зробити?

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

3689
04 мая '10 в 15:58 2010-05-04 15:58 заданий Roni Yaniv 04 травня '10 о 15:58 2010-05-04 15:58
@ 13 відповідей

У Git 1.7.0 і пізніших версіях ви можете перевірити нову гілку:

 git checkout -b <branch> 

Редагування файлів, додавання і фіксація. Потім натисніть з опцією -u (скорочення від --set-upstream ) :

 git push -u origin <branch> 

Git буде налаштовувати інформацію відстеження під час натискання.

5823
03 июня '11 в 23:50 2011-06-03 23:50 відповідь дан Daniel Ruoso 03 червня '11 о 23:50 2011-06-03 23:50

Якщо ви не ділитеся своїм репо з іншими користувачами, це корисно для того, щоб виштовхувати всі ваші гілки на віддалений, і --set-upstream правильно для вас:

 git push --all -u 
border=0

(Не зовсім те, про що просив OP, але цей однорядковий інтерфейс досить популярний)

Якщо ви ділитеся своїм репо з іншими, це не дуже гарна форма, так як ви будете забивати репо усіма вашими виверткими експериментальними гілками.

449
20 янв. відповідь дан ErichBSchulz 20 Січня. 2014-01-20 14:36 '14 о 14:36 2014-01-20 14:36

До введення 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 
133
04 мая '10 в 16:03 2010-05-04 16:03 відповідь дан Lohrun 04 травня '10 о 16:03 2010-05-04 16:03

Простіше кажучи, щоб створити нову гілку локальна, виконайте:

 git branch <branch-name> 

Щоб перемістити його в репозиторій віддалений, виконайте наступні дії:

 git push -u origin <branch-name> 
111
24 апр. відповідь дан piyushmandovra 24 Квітня. 2015-04-24 15:09 '15 о 15:09 2015-04-24 15:09

Невелика варіація вже запропонованих рішень:

  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:

    2019

Я припускаю, що ви вже клонували проект, наприклад:

 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 
27
відповідь дан VP. 2010-05-04 16:04 04 травня '10 о 16:04 2010-05-04 16:04

Я просто роблю

 git push -u origin localBranch:remoteBranchToBeCreated 

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

Git створює нову гілку з ім'ям remoteBranchToBeCreated під моїми remoteBranchToBeCreated я зробив в localBranch .

24
20 марта '17 в 14:13 2017-03-20 14:13 відповідь дан Arda 20 березня '17 14:13 2017-03-20 14:13

редагувати застарілі, просто використовувати git push -u origin $BRANCHNAME


Використовуйте git publish-branch з Вільяма різних інструментів Git ( gitorious repo і clone ).

Добре, немає Ruby, тому - ігноруючи запобіжні заходи! - візьміть останні три рядки скрипта і створіть скрипт bash, git-publish-branch :

19
04 мая '10 в 16:03 2010-05-04 16:03 відповідь дан Tobias Kienzler 04 травня '10 о 16:03 2010-05-04 16:03

Щоб створити нову гілку, відокремивши її від існуючої гілки

git checkout -b <new_branch>

а потім натисніть цю нову гілку в сховище, використовуючи

git push -u origin <new_branch>

Це створює і штовхає все локальні коммітов до новоствореної віддаленої гілці origin/<new_branch>

16
03 июня '15 в 23:36 2015-06-03 23:36 відповідь дан cptjack 03 червня '15 о 23:36 2015-06-03 23:36

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

7
05 янв. відповідь дан Thuy Trinh 05 Січня. 2016-01-05 13:11 '16 о 13:11 2016-01-05 13:11

Для версії GitLab до версії 1.7 використовуйте:

git checkout -b name_branch

(Name_branch, ex: master)

Щоб відправити його в віддалений репозиторій, виконайте наступні дії:

git push -u origin name_new_branch

(Name_new_branch, приклад: функція)

6
06 дек. відповідь дан Fadid 06 дек. 2016-12-06 21:42 '16 о 21:42 2016-12-06 21:42

Трохи спираючись на відповіді тут, я загорнув цей процес як простий скрипт 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 origin 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 the origin 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 
1
21 апр. відповідь дан Brad Parks 21 Квітня. 2017-04-21 16:30 '17 о 16:30 2017-04-21 16:30

Щоб завантажити локальну гілка загальнодоступного сховища, вам потрібно cd відкрити загальний репозиторій, а потім використовувати наступний код:

 git push -u origin branchname 
-8
26 июня '15 в 12:37 2015-06-26 12:37 відповідь дан shankar kumar 26 червня '15 о 12:37 2015-06-26 12:37

Інші питання по мітках або Задайте питання