Uzak Git dalını nasıl oluşturursunuz?


3129

Yukarı doğru 'itmek' istediğim yerel bir şube oluşturdum. Benzer bir soru, Stack Overflow'da yeni oluşturulan bir uzak dalın nasıl izleneceği konusunda da var.

Ancak, iş akışım biraz farklı. İlk önce yerel bir şube oluşturmak istiyorum ve sadece memnun olduğumda ve şubemi paylaşmak istediğimde yukarı doğru iteceğim.

  • Bunu nasıl yaparım? (Google aramalarım hiçbir şey göstermedi).
  • Meslektaşlarıma membadan veri havuzundan çekmelerini nasıl söyleyebilirim?

GÜNCELLEME Git 2.0 ile aşağıda yazdığım daha basit bir cevap var: https://stackoverflow.com/a/27185855/109305


14
Hiç kimse ikinci soruya cevap verdi mi? >> Ve meslektaşlarıma membadan veri havuzundan çekmelerini nasıl söyleyebilirim?
milkplus


1
@milkplus get fetch --alluzak taraftaki yeni dalları getirir (ancak yalnızca get fetch --prunesilinen uzak dallara yapılan başvuruları yerel olarak siler). Bence, bunlar otomatik olarak onlar tarafından kurulmalı ya da onlarla sözlü olarak konuşmalısınız.
peterh - Monica

Yanıtlar:


3732

İlk olarak, şubenizi yerel olarak oluşturursunuz:

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

Uzak şube, uzak sunucuya ittiğinizde otomatik olarak oluşturulur. Böylece hazır hissettiğinizde şunları yapabilirsiniz:

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

Nerede <remote-name>genellikle originuzak sen klonlanmış verdiği git adı. Daha sonra iş arkadaşlarınız bu dalı çeker ve otomatik olarak yerel olarak oluşturulur.

Ancak biçimin şu şekildedir:

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

Ancak birini atladığınızda, her iki dal adının da aynı olduğunu varsayar. Bunu bir uyarı kelimesi olarak söyledikten sonra , yalnızca :<remote-branch-name>(iki nokta üst üste işaretiyle) belirtmek gibi kritik bir hata yapmayın , aksi takdirde uzak dal silinir!

Sonradan git pullne yapacağını bilecek, bunun yerine kullanmak isteyebilirsiniz:

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

Aşağıda açıklandığı gibi, --set-upstreamseçenek bir yukarı akış dalı oluşturur:

Güncel veya başarıyla itilen her dal için, bağımsız değişken git-pull (1) ve diğer komutlar tarafından kullanılan yukarı akış (izleme) başvurusunu ekleyin.


85
Git'in varsayılan davranışının eşleşen ref'leri zorlamak olduğunu unutmayın , bu nedenle git push <remote>mevcut değilse dalı itmez <remote>.
Jakub Narębski

222
Bunun git push -u <remote-name> <branch-name>yerine kullanmak isteyebilirsiniz , böylece daha sonra git pullne yapacağını bilecektir.
Bart Schuller

87
Açıkça sunucu adını belirtmek yerine, kullanabilirsiniz origin, yani "Ben bu depodan geri kalanı sunucu var" anlamına gelir: böylece git push origin <branch-name>.
lambshaanxy

68
-uSeçeneği kullanmayı unutursanız git push -u, daha sonra şubeye yazabilirsiniz , sonra git pullçalışacaktır.
Ocak

90
Hepsini bir araya getirmek git push -u origin <local-branch-name>benim için işe yarayan şeydi.
Samo

881

İlk olarak, şubenizi yerel olarak oluşturmanız gerekir

git checkout -b your_branch

Bundan sonra, şubenizde yerel olarak çalışabilirsiniz, şubeyi paylaşmaya hazır olduğunuzda, itin. Bir sonraki komut, dalı uzak havuz kaynağına iter ve izler

git push -u origin your_branch

Takım arkadaşları şubenize şu şekilde ulaşabilir:

git fetch
git checkout origin/your_branch

Git push'a argümanlar geçirmeden dalda çalışmaya ve istediğiniz zaman itmeye devam edebilirsiniz (argümansız git push master'ı uzak master'a, yerel _branch'ınızı uzaklaştırmak için yerel olanı iter ...)

git push

Takım arkadaşları taahhütte bulunarak şubenize itebilir ve sonra açıkça itebilirler

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

Veya git push argümanları önlemek için şube izleme

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

Aynı adda yerel bir dal oluşturmadan uzak dal oluşturmanın bir yolu var mı?
Ariel Gabizon

330

Basit Git 2.0+ çözümü:

İtibariyle Git 2.0 davranış daha basit hale gelmiştir :

Git'i push.default = currenthayatı kolaylaştırmak için yapılandırabilirsiniz :

Bunu ekledim, şimdi yeni bir şubeyi yukarı doğru itebilirim

$ git push -u

-uaynı adlı uzak dalı izleyecek. Şimdi bu yapılandırma ile git push için uzaktan referansı otomatik olarak tahmin edeceksiniz. Gönderen git.config belgeler :

push.default

Açıkça herhangi bir refspec verilmemişse git push eylemini gerçekleştirir.

push.default = current- alıcı uçta aynı ada sahip bir dalı güncellemek için geçerli dalı itin. Hem merkezi hem de merkezi olmayan iş akışlarında çalışır.

Benim için bu, Git Git iş akışımı iyi bir şekilde basitleştiriyor. Yapılandırma ayarı, yerel olarak bir şube eklediğiniz ve uzaktan oluşturmak istediğiniz 'olağan' kullanım durumunu ele alır. Ayrıca, sadece git co remote_branch_name( --set-upstream-tobayrak kullanmak yerine) yaparak uzaktan kumandalardan yerel şubeler oluşturabilirim .

Bu soruyu biliyorum ve kabul edilen cevaplar oldukça eski, ancak davranış değişti, böylece iş akışınızı basitleştirmek için yapılandırma seçenekleri var.

Genel Git yapılandırmanıza eklemek için bunu komut satırında çalıştırın:

$ git config --global push.default current

5
Burada , yazacak çok fazla olmadan biraz daha ayrıntılı (yaptığınızı yazıyorsunuz) git push -u origin HEADyanıtlandığını görüyorum . Ayrıca, şube ile oluşturulduysa ek argüman olmadan benim için işe yaramadıgit push -u-t
Qw3ry

git config --global push.default upstream && git checkout -b foo && <change a file> && git push -uçalışmıyor (git 2.19.1 itibariyle); push, uzak ve dal argümanlarını gerektirir.
knite

Ne demek istediğini genişletebilir misin git co remote_branch_name?
flannelbeard

84

Önceki cevaplarda belirtildiği gibi,

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

yerel bir şubeyi itmek için yeterlidir.

İş arkadaşlarınız, bu komutla tüm uzak dalları (yenileri de dahil) çekebilir:

git remote update

Daha sonra, dalda değişiklik yapmak için olağan akış:

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

Bu adı seviyorum çünkü uzak adın yerel
addan

66

Geçerli şubeye göre yerel olarak yeni bir şube oluşturun:

git checkout -b newbranch

Değişiklikleri normalde yaptığınız gibi yapın. Ardından, yukarı doğru itin:

git push -u origin HEAD

Bu, geçerli dalı aynı adı taşıyan bir şubeye göndermek originve izlemek için bir kısayoldur, böylece origin HEADgelecekte belirtmeniz gerekmez .


4
Bu benim durumumda yardımcı: git push -u origin HEAD. Bence bu en açık yol.
Scadge

2
Evet, bir dal olarak en son ne yazdığınızı asla hatırlamıyorsunuz, bu yüzden bu yol.
marksyzm

4
@marksyzm Hangi şubede olduğunuzu veya ona ne ad verdiğinizi hatırlayamıyorsanız, muhtemelen hiç itmemelisiniz! En azından, git statusönce koşmadan olmaz .
Zenexer

1
Evet, dünyanın bu baskıda patlamamasını sağlamalıyız; Katılıyorum.
marksyzm

1
Bu, bir izleme dalı ve aynı zamanda uzak bir dal oluşturmanın en etkili yoludur. Ayrıca git remote show originyeni izleme / takip ilişkisini görselleştirmek için üçüncü bir adım olarak eklemek istiyorum .
hb5fa

54

Geçerli daldan bir dal oluşturmak istiyorsanız

git checkout -b {your_local_branch_name} 

Uzak bir daldan bir dal istiyorsanız, deneyebilirsiniz

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

Değişikliklerle işiniz bittiğinde dosyayı ekleyebilirsiniz.

git add -A or git add <each_file_names>

Sonra yerel olarak bir taahhütte bulunun

git commit -m 'your commit message'

Uzak repoya geçmek istediğinizde

git push -u origin <your_local_branch_name>

Hep birlikte olacak

git checkout -b bug_fixes 

veya Uzak bir daldan bir dal oluşturmak istiyorsanız, geliştirme deyin

git checkout -b bug_fixes kökeni / gelişimi

Uzak repo ile şubeye itebilirsiniz.

git push -u origin bug_fixes

Şubenizi başka bir şubeden güncellemek istediğinizde master deyin .

git pull origin master.


46

Aslında yerel olana sahip olmadan uzak dal oluşturmak istiyorsanız, bunu şu şekilde yapabilirsiniz:

git push origin HEAD:refs/heads/foo

HEAD'iniz ne olursa olsun uzaktan kumandada olmayan şube foo'yu iter .


Bunu yapmak, Visual Studio'umu doğru şekilde başlamayacağı noktaya tamamen karıştırdı. Takım Gezgini hiç yüklenmezdi, ancak diğer her şey de çılgınca hatalar attı. Sadece FYI.
Josh

Bu işe yarayacak gibi görünüyor, ama gerçekten denediğimde, gitlab sunucumuz sonucu bir şube olarak tanımadı.
JosephH

Uzaktan kumandada hangi dal dallanıyor? Ya foo2'den ayrılmak istersem? Mümkün mü? Teşekkür ederim.
user674669

Gerrit sunucusunda da çalışır ve uzaktan kumandada bu komuttan önce olmayan yeni bir dal oluşturur.
MichaelZ

33

En Kolay Çözüm ... Drumm Roll ... git sürüm 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

Not - Yerel ortamınızda yeni oluşturduğunuz dal ile zorlamaya çalıştığınız uzak olmayan dal aynı ada sahip olmalıdır .


3
Önerin için teşekkürler. Bunu kolay bir çözüm olarak adlandırsanız bile, yine de git push -uçok daha kolay olduğunu düşünüyorum . Bir global yapılandırma hattınızın olması gerekir, bkz. Stackoverflow.com/a/27185855/109305 . git push -uSürekli kullanıyorum, çalışırken kullanımlarımın % 99'unu kapsıyor.
Jesper Rønn-Jensen

29

[Hızlı cevap]

2 adımda yapabilirsiniz:

1.checkout for yerel dal oluşturmak için kullanın :

git checkout -b yourBranchName

2.push Şubeyi otomatik olarak oluşturmak ve kodu uzak depoya göndermek için komutu kullanın :

git push -u origin yourBanchName

Bunu yapmanın birden çok yolu var ama bence bu yol gerçekten basit.


1
Hızlı ve noktaya!
Dev

26

Önce şubeyi yerel olarak oluşturursunuz:

git checkout -b your_branch

Ve sonra dalı uzaktan oluşturmak için:

git push --set-upstream origin your_branch

Not: Git'in en son sürümlerinde çalışır:

$ git --version
git version 2.3.0

Şerefe!


Bu, yalnızca git pushyerel dalınız bir uzaktan kumanda tarafından izlenmediğinde komut tarafından oluşturulan yardım metnidir .
nurettin

18

Yerel makinenizde şube oluşturun ve bu dalı değiştirin:

$ git checkout -b [name_of_your_new_branch]

Şubeyi github üzerine itin:

$ git push origin [name_of_your_new_branch]

Şubenizde bir şey yapmak istediğinizde, şubenizde olduğunuzdan emin olun.

Şunu kullanarak oluşturulan tüm dalları görebilirsiniz:

$ git branch

Gösterecekler:

* approval_messages
  master
  master_clean

Şubeniz için yeni bir uzaktan kumanda ekleyin:

$ git remote add [name_of_your_remote] 

Taahhüdünüzden değişiklikleri şubenize aktarın:

$ git push origin [name_of_your_remote]

Resmi depodaki orijinal şube güncellendiğinde şubenizi güncelleyin:

$ git fetch [name_of_your_remote]

Daha sonra değişiklikleri birleştirmek için başvurmanız gerekir, şubeniz gelişmeden türetilmişse yapmanız gerekenler:

$ git merge [name_of_your_remote]/develop

Yerel dosya sisteminizdeki bir dalı silin:

$ git branch -d [name_of_your_new_branch]

Dosya sisteminizde yerel şubenin silinmesini zorlamak için:

$ git branch -D [name_of_your_new_branch]

Github'daki dalı silin:

$ git push origin :[name_of_your_new_branch]

İşte Tüm Bilgiler

Mevcut Diğer Proje


14

Mevcut bir şubeden yerel bir şube oluşturma (master / develop / herhangi bir diğer şube olabilir).

git checkout -b şube_adı

Uzaktan kumandayı it

git push -u uzak_adı local_branch_name: uzak_branch_adı

Buraya,

  1. -u: yukarı akış dalını ayarlar
  2. remote_name: git, havuzu oluşturduğunda adı varsayılan olarak "orijin" olarak ayarlar. Ancak bu, farklı bir adla değiştirilebilir.
  3. local_branch_name: aktarılacak yerel şubenin adıdır.
  4. remote_branch_name: uzaktan kumandada oluşturmak istediğimiz uzak dalın adıdır.

Yerel ve uzak dal adlarını kaldırırsak,

git push -u uzak_adı şube_adı

Bu, yerel dalı uzaklara ve yerel şube dalı_adı ile aynı ada sahip hale getirir. Yerel şube de uzak dalı izleyecektir.


10

Bu sorunun iyi yanıtlandığını biliyorum, ama sadece yeni bir şube "myNewBranch" oluşturmak ve uzaktan (benim durumumda "kökeni") ve izleme kurmak için attığım adımları listelemek istedim. Bunu "TL; DR" sürümünü düşünün :)

# 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

Şimdi git ile doğru dalda olduğunuzu yazabilirsiniz.

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

ve git sizin için başlangıç ​​dalını oluşturur.


1
-u --set-upstream için kısadır .. bu yüzden komut git push -u origin <remote-branch-name> olabilir
Uncaught Exception

ölümcül: 'kökeni' git deposu gibi görünmüyor
Dmitry Grinko

belki de git
deponuzun

8

Sadece şunu eklemek istedim:

git checkout -b {branchName}

Yeni bir dal oluşturur, aynı zamanda bu dalı denetler / mevcut dalınız yapar. Herhangi bir nedenden ötürü, tek yapmanız gereken bir dalı koparmak, ancak onu geçerli dalınız yapmak değilse, aşağıdaki komutu kullanırsınız:

git branch {branchName}

İlk komutta, "checkout" adı geçen dalı geçerli dalınız yapar ve "-b" şu anlama gelir: bu dal henüz mevcut değil, bu yüzden benim için yap.


6

Kaynak Ağacı üzerinden nasıl yapılır

 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>yeni oluşturulan şube aynı repodan çıkmazsa çalışmaz, yani yeni dalı kullanarak oluşturmadıysanız git checkout -b new_branch, bu çalışmaz.

Örneğin, iki farklı depoyu yerel olarak klonladım ve repo2 / branch1'i repo1 / 'e kopyalamak ve sonra da itmek zorunda kaldım.

Bu bağlantı, yerel şubemi (başka bir repodan klonlanmış) uzak repoma itmeme yardımcı oldu:


3

İşte Egit üzerinden tutulmada nasıl yapılır.

1) "Git Deposu Keşfetme" görünümüne gidin ve şube oluşturmak istediğiniz git projesini genişletin. Brances -> Local .. altında şubesi oluşturmak istediğiniz dalı seçin (benim durumumda master'ı seçtim .. isterseniz başka bir dalı da seçebilirsiniz) .. sonra sağ tıklayın ve Şube Oluştur seçeneğini tıklayın .. ve bu proje için ödeme seçeneğini seçin ve ardından bitir düğmesine tıklayın.

2) Şimdi proje gezgini projeyi seçin .. sağ tıklayın sonra Takım -> Push Branch.

Yeni bir uzak dal oluşturulacak. Şube adını meslektaşlarınıza çekebilmeleri için verebilirsiniz.


Egit ve tüm JGit tabanlı istemciler AFAIK hakkında teğetsel uyarı: .gitattributes! Bu, ekibiniz bir Windows (CRLF) ve Linux / OSX (LF) karışımı kullanıyorsa, her zaman her istemcinin doğru ayarlara sahip olmasına güvenmeniz gerekir. Doğal olarak, satır sonlarını merkezi olarak repo veya proje düzeyinde yönetmek daha iyidir ve .gitattributes bunu yapmanın desteklenen yoludur. Yani, eğer Egit'i kullanmak zorunda değilsen ... yapma! :)
cweekly

2

Şube oluşturmak için iki yol kullandım

TortoiseGit kullanıyorsanız şu adımları izleyin: -

1. TortoiseGit kullanarak Şube Oluşturun

Projenize sağ tıklayın >>> TortoiseGit >>> Şube Oluştur >>> şubenin adını yazın ve temel şubeyi seçin, ardından Tamam'a basın

2. şubeyi itin

Projenize sağ tıklayın >>> TortoiseGit >>> itme >>> tıklayın tamam

3. yeni şubeye geçin

Projenize sağ tıklayın >>> TortoiseGit >>> Geçiş / Ödeme >>> yeni oluşturulan dalı seçin ve Tamam'a basın

Komut istemini kullanıyorsanız şu adımları izleyin: -

1. komut istemini kullanarak şube oluşturma

$ git checkout -b Instagram Hesabındaki Resim ve Videoları new_branch_name

2. şubeyi itin

$ git push origin Instagram Hesabındaki Resim ve Videoları new_branch_name

3. yeni şubeye geçin zaten new_branch_name'ye geçecek, aksi takdirde kullanabilirsiniz

$ git checkout Instagram Hesabındaki Resim ve Videoları new_branch_name


0

Bunu kullanıyorum ve oldukça kullanışlı:

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

Kullanım: git mkdir NEW_BRANCH

Git durumuna bile ihtiyacınız yok; belki her şeyin yolunda gittiğinden emin olmak istiyorum ...

Tek bir komutla LOCAL ve REMOTE dallarına sahip olabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.