Як створити віддалену гілку 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.