Як створити віддалену гілку Git?


3128

Я створив локальну гілку, яку хочу "просунути" вгору за течією. Тут є аналогічне запитання щодо Stack Overflow про те, як відстежувати новостворену віддалену гілку.

Однак мій робочий процес дещо інший. По-перше, я хочу створити локальну філію, і я підштовхну її до течії лише тоді, коли буду задоволений і захочу поділитися своїм відділенням.

  • Як би я це зробив? (мої пошукові пошуки в Google, схоже, нічого не придумали).
  • Як я можу сказати своїм колегам витягнути його із сховища верхньої частини?

ОНОВЛЕННЯ З Git 2.0 є простіша відповідь, яку я написав нижче: https://stackoverflow.com/a/27185855/109305


14
хтось коли-небудь відповідав вам на друге запитання? >> І як би я сказав своїм колегам витягнути його із сховища верхів?
— молочниця


1
@milkplus get fetch --allотримує нові гілки на віддаленій стороні (але лише get fetch --pruneлокально видаляє посилання на видалені віддалені гілки). Я думаю, або це повинно встановлюватися ними автоматично, або вам доведеться з ними говорити усно.
— петерх

Відповіді:


3732

Спочатку ви створюєте свою філію локально:

git checkout -b <branch-name> # Create a new branch and check it out

Віддалена гілка створюється автоматично, коли ви натискаєте її на віддалений сервер. Тож коли ви відчуваєте, що до цього готові, ви можете просто зробити:

git push <remote-name> <branch-name> 

Де <remote-name>зазвичай origin, ім'я, яке git дає віддаленому, з якого ви клонувались. Тоді ваші колеги просто тягнуть цю гілку, і вона автоматично створюється локально.

Зауважте, що формально формат такий:

git push <remote-name> <local-branch-name>:<remote-branch-name>

Але якщо ви опустите один, він передбачає, що обидві назви гілок однакові. Сказавши це, як обережне слово , не робіть критичної помилки, вказуючи лише :<remote-branch-name>(двокрапка), інакше віддалена гілка буде видалена!

Щоб наступні git pullзнали, що робити, ви можете замість цього скористатися:

git push --set-upstream <remote-name> <local-branch-name> 

Як описано нижче, --set-upstreamопція встановлює гілку за течією:

Для кожної гілки, яка є оновленою або успішно висунутою, додайте посилання на течію (відстеження), використовувану без аргументів git-pull (1) та іншими командами.


85
Зверніть увагу , що поведінка мерзотника по замовчуванням натиснути відповідні реф, тому git push <remote>НЕ буде штовхати гілку , якщо його немає на <remote>.
— Якуб Нарбський

222
Ви можете скористатись git push -u <remote-name> <branch-name>натомість, щоб наступні git pullзнали, що робити.
— Барт Шуллер

87
Замість того, щоб чітко вказати ім’я сервера, ви можете просто використовувати origin, що означає "сервер, з якого я отримав решту цього репо": таким чином git push origin <branch-name>.
— лямбханксі

68
Якщо ви забудете скористатися -uопцією, ви можете просто ввести git push -uпізніше у відділення, тоді git pullбуде працювати.
— січня

90
Якщо все це було разом, git push -u origin <local-branch-name>це працювало для мене.
— Само

880

По-перше, ви повинні створити свою філію локально

git checkout -b your_branch

Після цього ви можете працювати локально у своєму відділенні, коли ви будете готові поділитися гілкою, натисніть на неї. Наступна команда підштовхує гілку до походження віддаленого сховища та відстежує її

git push -u origin your_branch

Колеги по команді можуть дістатися до вашого відділення, зробивши:

git fetch
git checkout origin/your_branch

Ви можете продовжувати працювати у гілці та натискати коли завгодно, без передачі аргументів на git push (аргумент без git push підштовхне майстра до віддаленого майстра, локальний your_branch до віддаленого your_branch тощо)

git push

Спільники по команді можуть просуватися до вашого відділення, виконуючи обов'язки, а потім явно натискати

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

Або відстеження гілки, щоб уникнути аргументів git push

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push

Чи існує спосіб створити віддалену гілку без створення однойменної локальної гілки?
— Аріель Габізон

330

Просте рішення Git 2.0+:

Станом на Git 2.0 поведінка стала простішою :

Ви можете налаштувати git, push.default = currentщоб полегшити життя:

Я додав це, тому тепер я можу просто натиснути нову гілку вище за течією

$ git push -u

-uвідстежує однойменну віддалену гілку. Тепер з цією конфігурацією ви автоматично відгадуєте віддалене посилання на git push. З документації на git.config :

push.default

Визначає, що git push має виконуватися, якщо чітко не вказано жодної респекту.

push.default = current- натисніть поточну гілку, щоб оновити гілку з тим самим іменем на кінці отримання. Працює як в центральному, так і в не центральному робочому процесі.

Для мене це хороше спрощення мого щоденного робочого процесу Git. Налаштування конфігурації стосується "звичайного" випадку використання, коли ви додаєте гілку локально і хочете створити її віддалено. Крім того, я можу так само легко створювати локальні гілки з віддалених, просто роблячи це git co remote_branch_name(на відміну від використання --set-upstream-toпрапора).

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

Щоб додати до вашої глобальної конфігурації Git, запустіть це в командному рядку:

$ git config --global push.default current

5
Я вважаю git push -u origin HEAD, що тут відповіли дещо більш багатослівним (ви пишете, що ви робите), не надто друкуючи. Крім того, git push -uбез додаткових аргументів для мене не вийшло, якщо філія була створена за допомогою-t
— Qw3ry

git config --global push.default upstream && git checkout -b foo && <change a file> && git push -uне працює (станом на git 2.19.1); push вимагає віддалених та гілок аргументів.
— knite

Чи можете ви розширити, про що ви розумієте git co remote_branch_name?
— flannelbeard

84

Як зазначено в попередніх відповідях,

git push <remote-name> <local-branch-name>:<remote-branch-name>

достатньо для проштовхування місцевої гілки.

Ваші колеги можуть за допомогою цієї команди витягнути всі віддалені гілки (включаючи нові):

git remote update

Потім, щоб внести зміни на гілку, звичайний потік:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>

Мені подобається, що ця назва дозволяє віддаленій назві відрізнятися від локальної
— Аріель Габізон

66

Створіть нову гілку локально на основі поточної гілки:

git checkout -b newbranch

Зробіть будь-які зміни, як зазвичай. Потім натисніть на неї вгору:

git push -u origin HEAD

Це ярлик, щоб підключити поточну гілку до однойменної гілки originта відстежити її, щоб не потрібно було вказувати її origin HEADв майбутньому.


4
Це допомогло в моєму випадку: git push -u origin HEAD. Я думаю, що це найбільш зрозумілий спосіб.
— Скад

2
Так, ти ніколи не пам’ятаєш, що саме ти востаннє набрав як гілку, тож це шлях.
— marksyzm

4
@marksyzm Якщо ви не можете згадати, на якій гілці ви знаходитесь, або як ви її назвали, ви, ймовірно, не повинні взагалі натискати! Принаймні, не без git statusпершого бігу .
— Зенексер

1
Так, треба переконатися, що світ не вибухне на цьому натиску; Я згоден.
— markyzm

1
Це найбільш ефективний спосіб створити гілку відстеження, а також віддалену гілку одночасно. Я також хотів би додати git remote show originяк третій крок лише для візуалізації нових відносин відстеження / відстеження.
— hb5fa

54

Якщо ви хочете створити гілку з поточної гілки

git checkout -b {your_local_branch_name} 

ви хочете гілку з віддаленої гілки, ви можете спробувати

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

Якщо ви закінчилися зі змінами, ви можете додати файл.

git add -A or git add <each_file_names>

Тоді виконайте місце на місцевому рівні

git commit -m 'your commit message'

Коли ви хочете натиснути на віддалений репо

git push -u origin <your_local_branch_name>

Всі разом будуть

git checkout -b bug_fixes 

або Якщо ви хочете створити гілку з віддаленої гілки, скажіть про розвиток

git checkout -b bug_fixes походження / розвиток

Ви можете натиснути на відділення до віддаленого репо, від

git push -u origin bug_fixes

У будь-який час ви хочете оновити свою філію з будь-якої іншої гілки, скажімо, майстра .

git pull origin master.


46

Якщо ви хочете просто створити віддалену гілку, не маючи локальної, ви можете це зробити так:

git push origin HEAD:refs/heads/foo

Це підштовхує все, що є вашою ГОЛОВОЮ, щоб розгалужити foo, що не існувало на пульті.


Це повністю заплутало мою Visual Studio до тієї точки, коли вона не запустилася б правильно. Команда Explorer взагалі не завантажувалась, але все інше пішло й у бонкери, що також кидало помилки. Просто FYI.
— Джош

Це здається, що це має спрацювати, але коли я насправді спробував це, наш сервер gitlab не розпізнав результат як гілку.
— Йосиф H

Яка гілка є відгалуженою на відстані? Що робити, якщо я хотів, щоб foo відгалужував foo2? Це можливо? Дякую.
— користувач674669

Він працює і на сервері gerrit, створюючи нову гілку на пульті, яка не існувала до цієї команди.
— MichaelZ

33

Найпростіше рішення ... Drumm Roll ... git версія 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

Примітка. Гілка, яку ви тільки що створили у вашому локальному середовищі, та віддалена неіснуюча гілка, куди ви намагаєтесь натиснути, повинні мати те саме ім’я .


3
Дякуємо за вашу пропозицію. Незважаючи на те, що ви називаєте це простим рішенням, я все ж думаю, що git push -uце простіше. Потрібно мати одну глобальну лінію конфігурації, див. Stackoverflow.com/a/27185855/109305 . Я використовую git push -uпостійно, він охоплює 99% моїх шаф під час роботи.
— Jesper Rønn-Jensen

29

[Швидкий відповідь]

Ви можете зробити це в 2 крути:

1. Використовуйте checkoutдля створення локальної гілки:

git checkout -b yourBranchName

2. Використовуйте pushкоманду для автоматичного створення гілки та надсилання коду у віддалений сховище:

git push -u origin yourBanchName

Є безглузді способи зробити це, але я думаю, що цей спосіб справді простий.


1
Швидко і до речі!
— Дев

26

Спочатку ви створюєте відділення локально:

git checkout -b your_branch

А потім створити гілку віддалено:

git push --set-upstream origin your_branch

Примітка. Це працює на останніх версіях git:

$ git --version
git version 2.3.0

Ура!


Це лише довідковий текст, згенерований командою, git pushколи ваша локальна гілка не відстежується віддаленим.
— Нуреттін

18

Створіть гілку на своїй локальній машині та переключіться на цю гілку:

$ git checkout -b [name_of_your_new_branch]

Натисніть на гілку на github:

$ git push origin [name_of_your_new_branch]

Коли ви хочете зробити щось у своїй філії, не забудьте бути у своєму відділенні.

Ви можете бачити всі гілки, створені за допомогою:

$ git branch

Що покаже:

* approval_messages
  master
  master_clean

Додати новий пульт для своєї філії:

$ git remote add [name_of_your_remote] 

Перемістіть зміни від свого зобов’язання у свою філію:

$ git push origin [name_of_your_remote]

Оновіть свою філію після оновлення оригінальної гілки з офіційного сховища:

$ git fetch [name_of_your_remote]

Тоді вам потрібно звернутися до змін об’єднання, якщо ваша філія виведена з розробки, вам потрібно зробити:

$ git merge [name_of_your_remote]/develop

Видаліть гілку з локальної файлової системи:

$ git branch -d [name_of_your_new_branch]

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

$ git branch -D [name_of_your_new_branch]

Видаліть гілку на github:

$ git push origin :[name_of_your_new_branch]

Тут вся інформація

Інший існуючий проект


14

Створення локальної гілки з існуючої гілки (можна керувати / розробляти / будь-яку іншу гілку).

git checkout -b гілка_назва

Натисніть це на віддалений

git push -u remote_name local_branch_name: remote_branch_name

Ось

  1. -u: встановлює верхню гілку
  2. remote_name: git встановлює ім'я за замовчуванням як "початкове", коли воно створює сховище. Однак це може бути змінено на іншу довільну назву.
  3. local_branch_name: це ім'я локальної гілки, яку потрібно висунути.
  4. remote_branch_name: це назва віддаленої гілки, яку ми хочемо створити на віддаленій.

Якщо ми видалимо локальні та віддалені назви гілок, вони матимуть формат

git push -u віддалене_ ім'я гілки_назви

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


10

Я знаю, що на це питання добре відповіли, але я просто хотів перерахувати кроки, які я вживаю, щоб створити нову гілку "myNewBranch" та натиснути на віддалене ("походження" в моєму випадку) та налаштувати відстеження. Вважайте це версією "TL; DR" :)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch

8

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

git push --set-upstream origin <remote-branch-name>

і git створить для вас гілку походження.


1
-u короткий для --set-upstream .. тому команда може бути git push -u origin <remote-branch-name>
— Uncaught Exception

фатально: "походження" не схоже на сховище git
— Дмитро Гринько

можливо, вам доведеться встановити походження вашого сховища git
— Maurizio Brioschi

8

Просто хотів додати це:

git checkout -b {branchName}

Створює нову гілку, вона також перевіряє цю гілку / робить її поточною гілкою. Якщо з якихось причин все, що ви хочете зробити, - це відключити гілку, але не зробити її поточною гілкою, то ви скористаєтеся такою командою:

git branch {branchName}

У першій команді "checkout" робить вказану гілку вашою поточною гілкою, а "-b" означає: ця гілка ще не існує, тому зробіть це для мене.


6

Як це зробити через Дерево-джерело

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)

5

git push -u <remote-name> <branch-name>не працює, якщо новостворена гілка не породжена з того ж репо, тобто якщо ви не створили нову гілку за допомогою git checkout -b new_branch, то це не буде працювати.

Наприклад, я локально клонував два сховища, і мені довелося скопіювати repo2 / branch1 в repo1 /, а потім натиснути його теж.

Це посилання допомогло мені перенести свою локальну гілку (клоновану з іншої репо) на мою віддалену репо:


3

Ось як ви це робите в затемненні через Egit.

1) Перейдіть до перегляду «Git Repository Exploring» та поясніть проект git, до якого потрібно створити гілку. У розділі Brances -> Local .. виберіть гілку, для якої ви хочете створити гілку (у моєму випадку я вибрав майстер .. ви можете вибрати іншу гілку, якщо бажаєте) .. потім клацніть правою кнопкою миші та натисніть на опцію Створити гілку .. і виберіть замовлення цього варіанту проекту, а потім натисніть кнопку фінішу.

2) Тепер від програми провідника виберіть проект .. клацніть правою кнопкою миші та виберіть команду -> Push Branch.

Буде створено нове віддалене відділення. Ви можете дати назву філії своїм колегам, щоб вони могли її витягнути.


Тангенціальне попередження про Egit - і всіх клієнтів на базі JGit, AFAIK: вони не підтримують .gitattributes! Це означає, що якщо ваша команда використовує суміш Windows (CRLF) та Linux / OSX (LF), ви завжди повинні залежати від того, щоб кожен клієнт мав правильні налаштування. Звичайно, краще керувати закінченнями рядків централізовано на рівні репо або проекту, і підтримується .gitattributes - це підтримуваний спосіб. Отже, якщо вам зовсім не доведеться користуватися Egit ... не варто! :)
— cweekly

2

Я використовував два способи створення філії

Якщо ви використовуєте TortoiseGit, виконайте наступні дії: -

1.Створіть відділення за допомогою TortoiseGit

Клацніть правою кнопкою миші на вашому проекті >>> TortoiseGit >>> Створити відділення >>> напишіть назву гілки та виберіть базову гілку, потім натисніть кнопку ОК

2.Потисніть гілку

Клацніть правою кнопкою миші на вашому проекті >>> TortoiseGit >>> push >>> натисніть кнопку ОК

3.Перейти до нової гілки

Клацніть правою кнопкою миші на вашому проекті >>> TortoiseGit >>> Switch / Checkout >>> виберіть новостворену гілку та натисніть кнопку ok

Якщо ви використовуєте командний рядок, виконайте наступні дії: -

1.Створіть гілку за допомогою командного рядка

$ git check -b new_branch_name

2.Потисніть гілку

$ git push origin new_branch_name

3.Переключіться на нову гілку, вона вже перейде на нове_галузьке_ім'я, інакше ви можете використовувати

$ git check_ new_branch_name


0

Я використовую це, і це дуже зручно:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

Використання: git mkdir NEW_BRANCH

Вам навіть не потрібен статус git; можливо, я просто хочу переконатися, що все йде добре ...

Ви можете мати ВІДДІЛЕННЯ МІСЬКОГО та ВІДДАЛЕНОГО відділення за допомогою однієї команди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.