git: başlığı ayırmadan dalı değiştir


102

Github'da bir ana şubeye (ana) ve bazı deneysel çalışmalar için bir şubeye sahip bir depom var. Bazı taahhütler verdim ve deneysel şubeye gittim ve her şey yolundaydı.

Şimdi, farklı bir makinede, depomu (git clone deposu ) klonlamayı deniyorum ve sonra deneysel şubeye (git checkout şube adı ) geçiyorum ama bunu her yaptığımda kafam kopuyor ve değişikliklerimi zorlayamıyorum . Neyi yanlış yapıyorum? Bir yerde temel bir git konseptini kaçırdığımı hissediyorum ama rastgele git man sayfalarını okumak bana hiçbir ipucu vermiyor.

Gitme konusunda yeniyim, bu yüzden aptal olduğum için üzgünüm ama belgelerde kafamı yeniden bağlamama yardımcı olacak hiçbir şey bulamıyorum.

DÜZENLE

Kaçırdığım şey izleme dalı kavramı. Şimdi bu kavramı sersemlediğim için her şey açık. Şahsen ben git branch --tracksözdizimini olduğundan çok daha sezgisel buluyorum git checkout -b branch-name origin/branch-name.

Yardım için teşekkürler!


Kafayı ayırmadan dalı değiştirmek için Git 2.23 (Ağustos 2019) ile şunu kullanın git switch: aşağıdaki cevabıma bakın .
VonC

Yanıtlar:


115
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

Kolaylık sağlamak için, localname & branchname için aynı dizeyi kullanabilirsiniz Ödünç
aldığınızda origin/branchnamebir şubeyi gerçekten kontrol etmiyordunuz. origin/branchname"uzak" bir addır ve bunların bir listesini ile

branch -a 

Renkleri etkinleştirdiyseniz, yerel şubeler bir renk, diğerinden uzak olacaktır.

Geçiş yapabilmek ve üzerinde çalışabilmek için önce uzak bir şubeyi yerel olarak takip etmelisiniz.


9
Dostum, henüz takip edilmediyse neden "git checkout origin / branchname" şubeyi otomatik olarak izlemeye başlamıyor?
Martin Konicek

4
çünkü yabancı şube için hala yerel bir isme ihtiyacınız var.
Kent Fredric

İşte yaptığım şey ve hata mesajı: $ git checkout -b topic / fetch upstream / topic / fetch fatal: git checkout: güncelleme yolları dal değiştirme ile uyumsuz. Taahhüt olarak çözülemeyen "yukarı akış / konu / getirme" yi kontrol etmeyi düşündünüz mü?
ulu

2
Renklerle ilgili ipucu için teşekkürler. Renkleri etkinleştirmek için:git config --global --add color.ui true
PonyEars

1
"Origin / şube adı" nın kelimenin tam anlamıyla bir SHA1'e veya kendi başına bir SHA1'e çözümlenen herhangi bir şey olabileceğini belirtmek gerekir =). Bunu düzenli olarak keyfi köklere sahip keyfi dallar oluşturmak için kullanıyorum.
Kent Fredric

16
git clone git@github.com:abc/def.git
cd def

Şimdi bir izleme dalı oluşturun:

git branch --track experimental origin/experimental
git checkout experimental

Ardından, orada çalıştıktan sonra, github'a itin.

git push

3
git şube -t kaynak / deneysel # çok fazla yazmanıza gerek yok :)
Dustin

İzlemek istediğim dalın adı konu / getirme. $ Git branch --track topic / fetch upstream / topic / fetch yapmaya çalıştığımda, önemli: Geçerli bir nesne adı değil: 'upstream / topic / fetch' diyor.
ulu

1
@Dustin, bu komut yerel ana bilgisayarı izleyen yerel bir 'orijin / deneysel' şube oluşturur. Sanırım oldukça yaygın bir hata.
PDug

1
@PDug% git checkout -t kaynak / deneysel Dal deneysel olarak yeniden adlandırma yoluyla kökenden deneysel uzak şubeyi izlemek için ayarlandı. Yeni bir 'deneysel' dalına
geçildi

11

Kent'in cevabını genişletmek için, klonunuzu yaptıktan sonra sahip olacağınız tek dal (uzaktan kumandalar sayılmaz), klonladığınız depoda aktif olan daldır - sizin durumunuzda master.

Bu nedenle, önce uzaktan deneysel dalı izlemek için yeni bir dal oluşturmak isteyeceksiniz:

$ git branch experimental origin/experimental

ve sonra kontrol edin:

$ git checkout experimental

Ancak Kent haklı - bu iki komut birleştirilebilir

$ git checkout -b experimental origin/experimental

3

Git 2.23 (Ağustos 2019) ile şu git switchkomutu kullanırdınız:

Aynı adı taşıyan uzak bir şubeniz varsa, bu otomatik olarak izlenecektir:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'
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.