Git: Uzak bir dalı yerel olarak birleştirme


206

Tüm uzak dalları çektim git fetch --all. Birleştirmek istediğim dalı git branch -auzaktan kumanda / origin / branchname olarak görebiliyorum. Sorun erişilebilir değil. Birleştirme veya ödeme yapamıyorum?

Yanıtlar:


322

Bu uzaktan izleme dallarına ~ (listelenenler git branch -r) uzaktan kumandalarının adıyla başvurabilirsiniz .

Uzak dalı getirmeniz gerekiyor:

git fetch origin aRemoteBranch

Yerel şubenizdeki bu uzak dallardan birini birleştirmek istiyorsanız:

git checkout master
git merge origin/aRemoteBranch

Not 1: Uzun bir geçmişi olan büyük bir repo için, --depth=1kullandığınızda seçeneği eklemek istersiniz git fetch.

Not 2: Bu komutlar diğer uzak depolarla da çalışır, böylece bir çatal üzerinde çalışıyorsanız bir originve bir ayarlayabilirsiniz upstream.


Senaryo karşısında: Yerel dalınızdan birini uzak bir dalda birleştirmek istiyorsanız (uzak bir dalın aksine, yukarıda gösterildiği gibi yerel bir dalla), önce söz konusu uzak dalın üstünde yeni bir yerel dal oluşturmanız gerekir :

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

Buradaki fikir, "yerel şubenizden birini" (burada anotherLocalBranch) uzak bir şubeye ( origin/aBranch) birleştirmektir.
Bunun için, myBrancho uzak dalı temsil eden ilk " " öğesini yaratırsınız: git checkout -b myBranch origin/aBranchbölüm budur.
Ve sonraanotherLocalBranch onunla (to myBranch) birleşebilirsiniz .


aLocalBranch? bu bir yazım hatası mı? Sanırım tekrar "myBranch" yazmak istedin?
knocte

1
@knocte No: "Yerel şubenizden birini bu uzak daldan biriyle birleştirmek istiyorsanız": " aLocalBranch" ile " myBranch" arasında birleşiyorum , " myBranch" uzak bir dalı temsil ediyororigin/aBranch .
VonC

@VonC sizi rahatsız ettiğim için üzgünüm, önceki yorumunuzda aLocalBranchbir yazım hatası olmadığını söylüyorsunuz , ancak bu "olası yazım hatasını" düzelten en son düzenlemeyi (2 yıl sonra!) Onayladınız. Düzenlemeyi geri almadan önce sizinle görüşmek istedim.
rath

1
@rath Haklısın: Görünüşe göre, biraz aceleyle, dikkatsizlikle sınırlanan düzenlemeyi gözden geçirmiş olabilirim. Cevabı ikinci birleştirme davasını açıklığa kavuşturmak için düzenledim: bunun daha açık olup olmadığını söyleyebilir misiniz?
VonC

94

Birleştirme yaptığımda, birleştirmek istediğim şubeye giriyorum (örneğin " git checkout branch-i-am-working-in") ve sonra aşağıdakileri yapıyorum:

git merge origin/branch-i-want-to-merge-from


2
Sanırım bir git fetch origin/branch-i-want-to-merge-fromilk yapmak zorundasın , değil mi?
Hinrich

9
git fetch origin developardındangit merge origin/develop
Olivier

2
@Olivier Doğru, bunu yapmanın doğru yolu bu. git merge yalnız yapmaz.
Sam

1
anlamama yardımcı olan akıllı adlandırma kuralı için teşekkür ederim
tony2tones

1
@Akira Değil git add .-> git commit -m <message>-> git push -u origin <branch>?
Cloud Cho

25

Önce uzak dalı başlangıç ​​noktasından getir.

git fetch origin remote_branch_name

Uzak dalı yerel şubeyle birleştir

git merge origin/remote_branch_name

1
Kabul edilen cevap bildirilebildiğinde bu benim için çalıştı. Benim durumumda, GitHub'daki repoma ait başka bir kullanıcının çatalından birleşiyordum.
SJT

İlk komut getirilmesi gerekiyor mu? 'Git merge origin / remote_branch_name' yerel değil, uzak daldan okuyor mu? Bu yüzden umursamamalıyım, yerel şube güncellenmiş mi, değil mi?
Michael Freidgeim

@MichaelFreidgeim Yerel deponuzun uzaktan kumandanın durumunu bilmesi için önce getirmeniz gerekir. Git pull, temel olarak geçerli dalınızın geçerli uzak sürümünden bir getirme ve birleştirme işlemidir, ancak şimdi farklı bir tane alıp birleştiriyorsunuz. stackoverflow.com/questions/292357/…
DZet

20

Belki uzak şubeyi yerel bir şubeyle izlemek istersiniz :

  1. Yeni bir yerel şube oluşturun: git branch new-local-branch
  2. Bu yeni oluşturulan dalı uzak dalı izlemek için ayarlayın: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. Bu şubeye girin: git checkout new-local-branch
  4. Uzak şubenin tüm içeriğini yerel şubeye çekin: git pull

3

Uzak dalınızı zaten getirdiyseniz ve yaparsanız git branch -a, şöyle bir
şey elde edersiniz:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

Bundan sonra, rep_mirror/8.0uzak dalınızı yerel olarak belirlemek için kullanabilirsiniz .

İşin püf noktası bu remotes/rep_mirror/8.0işe yaramıyor ama işe yarıyor rep_mirror/8.0.

Yani, git merge -m "my msg" rep_mirror/8.0birleştirme gibi bir komut .

(not: bu @VonC cevabına bir yorum. Kod blokları yorum formatına uymadığı için başka bir cevap olarak koydum)

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.