Як перамясціць новы лакальны галіна ў выдалены рэпазітар 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 00:37

Іншыя пытанні па пазнаках або Задайце пытанне