Git'te başka bir şubeye nasıl geçebilirim?


222

Bu çizgilerden hangisi doğrudur?

git checkout 'another_branch'

Veya

git checkout origin 'another_branch'

Veya

git checkout origin/'another_branch'

Ve bu çizgiler arasındaki fark nedir?



32
git checkout [branch]bu soruya gelen çoğu kullanıcı için
JGallardo

Yanıtlar:


225

Eğer another_branchyerel olarak zaten var ve bu dalda değildir, daha sonra git checkout another_branchşube geçer.

Eğer another_branchmevcut değil ama var origin/another_branchise, o git checkout another_branchzaman eşdeğerdir git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch. Bu oluşturmak için var another_branchden origin/another_branchve seti origin/another_branchakışyukansı olarak another_branch.

Hiçbiri yoksa, git checkout another_branchhata döndürür.

git checkout origin another_branchçoğu durumda hata döndürür. Eğer originbir revizyon olup another_branchdaha sonra bu revizyonu dosyanın dışında kontroller ancak büyük olasılıkla en beklemediğiniz Ne yani bir dosyadır. originÇoğunlukla kullanılan git fetch, git pullve git pushbir uzaktan kumanda, uzaktan depo URL'nin bir takma ad olarak.

git checkout origin/another_branchvarsa başarılı olur origin/another_branch. Herhangi bir dalda değil, ayrı HEAD durumunda olmasına yol açar. Yeni taahhütlerde bulunursanız, yeni taahhütlere mevcut şubelerden ulaşılamaz ve şubelerin hiçbiri güncellenmez.

GÜNCELLEME :

2.23.0 yayımlandığı gibi, onunla git switchşube oluşturmak ve değiştirmek için de kullanabiliriz .

Varsa foo, şunlara geçmeyi deneyin foo:

git switch foo

Eğer foomevcut değildir ve origin/foomevcut oluşturmak için denemek foogelen origin/foove daha sonra geçiş foo:

git switch -c foo origin/foo
# or simply
git switch foo

Daha genel olarak, yoksa foo, foobilinen bir ref veya taahhütten oluşturmaya çalışın ve ardından şuraya geçin foo:

git switch -c foo <ref>
git switch -c foo <commit>

Gitlab ve Github'da aynı anda bir depomuz varsa, yerel deponun örneğin originGitlab ve githubGithub için iki uzaktan kumandası olabilir . Bu durumda depoda origin/foove vardır github/foo. git switch fooşikayet edecek fatal: invalid reference: foo, çünkü hangi ref'den origin/fooya da github/fooyaratılacağı bilinmiyor foo. İhtiyaca göre git switch -c foo origin/fooveya git switch -c foo github/fooihtiyaca göre belirtmemiz gerekiyor. Her iki uzak daldan da dallar oluşturmak istiyorsak, yeni dallar için ayırt edici adlar kullanmak daha iyidir:

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

Varsa foo, bilinen bir başvuru veya taahhütten yeniden oluşturmayı / zorla oluşturmayı foo(veya sıfırlamayı foo) deneyin ve ardından şuraya geçin foo:

git switch -C foo <ref>
git switch -C foo <commit>

eşdeğer olanlar:

git switch foo
git reset [<ref>|<commit>] --hard

Bilinen bir ref veya taahhütten bağımsız bir HEAD'e geçmeye çalışın:

git switch -d <ref>
git switch -d <commit>

Sadece bir şube oluşturmak istiyorsanız, ancak bir şubeye geçmek istemiyorsanız git branchbunun yerine kullanın. Bilinen bir ref veya taahhütten bir şube oluşturmaya çalışın:

git branch foo <ref>
git branch foo <commit>

24
Bu cevap doğrudur (her zamanki gibi ve yükseltilmiş), ancak yardımcı olabilecek bir yorum ekleyeceğim : git checkoutkomut bence çok fazla şey yapıyor. Bu yüzden burada çok fazla çalışma modu var. Tek şey olursa git checkoutyaptığım anahtar Cevap basit olurdu, ama aynı zamanda olabilir, dalları oluşturmak dalları ve hatta belirli kaydedilmesini dosyaları ayıklamak olmadan dalları anahtarlama.
torek

11
bu doğru cevap, ama git komut satırında nasıl berbat olduğunu gösterir. git şube çıkış değiştirmek için?
thang

3
@thang 2.23.0 sürümü ile, bu sorun giderildi: artık git switchbir şubeye geçmek için kullanabilirsiniz .
legends2k

Switch, git'in bu sürümü için çalışmıyor gibi görünüyor. Git'in bu sürümünde farklı bir şubeye geçmek için ne kullanmalıyım? C: \ widget> git --version git sürüm 2.11.0.windows.3 C: \ widget> git switch master git: 'switch' bir git komutu değil. Bkz. 'Git --help'. C: \ widget>
John

1
@John git checkout, modern sürümlerde de çalışan eski sürümler için kullanın .
ElpieKay

66

Git'te başka bir şubeye geçiliyor. Kolay cevap,

git-checkout - Dalları değiştir veya çalışan ağaç dosyalarını geri yükle

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

Şubeyi değiştirmeden önce değiştirilmiş dosyalara sahip olmadığınızdan emin olun, bu durumda değişiklikleri kabul edebilir veya saklayabilirsiniz.


Son komut beni müstakil HEAD durumuna getiriyor. Şube düzenlenemez anlamına gelir.

2
Ödeme yapmaya çalıştığınız şube alınmıyorsa, ödeme yapmadan önce getirmeniz gerekir. Şube güncelse getirmeyi atlayabilir ve sadece git checkout branchname öğesini kullanabilirsiniz.
danglingpointer

Şubeye geçtikten sonra bir "git pull" işlemi yapmak yeterli olmaz mı?

çekme de tamam, çekme getir ve arka planda birleştirir. Hiç fark görmüyorum.
danglingpointer

17

[ git checkout "branch_name"]

söylemenin başka bir yolu:

[ git checkout -b branch_name origin/branch_name]

"şube_adı" nın yalnızca uzaktan bulunması durumunda .

[ git checkout -b branch_name origin/branch_name], birden çok uzaktan kumandanız olması durumunda kullanışlıdır.

[ git checkout origin 'another_branch'] Bunun mümkün olduğundan emin değilim, AFAK bunu "getir" komutunu kullanarak yapabilirsiniz - [ git fetch origin 'another_branch']


Başka bir şube oluşturmak için "git checkout -b branchName" komutunu biliyorum. Soru bu değildi!

10

İle Git 2.23 itibaren, birini kullanabilirsiniz git switch <branch name>dalları geçin.


6

Benim için işe yarayan şudur:

Gerekli şubeye geçin:

git checkout -b BranchName

Sonra "efendi" yi çektim:

git pull origin master

6

Günlük hayatta çalışmak için yararlı komutlar:

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch

5

Şubenin uzak dalı izlemesini istiyorsanız, şubede değişiklik yapacaksanız ve değişiklikleri vb. Çekecekseniz çok içe aktarılıyorsa, gerçek ödeme için a -t eklemeniz gerekir. git checkout -t branchname


4

Kontrol : git branch -a

Sadece bir şube alıyorsanız. Ardından aşağıdaki adımları uygulayın.

  • Aşama 1 : git config --list
  • Adım 2 : git config --unset remote.origin.fetch
  • Aşama 3 : git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

2
Bu komut dizisinin başka bir şubeye nasıl geçeceğini merak ediyorum.

Bu, daha önce sığ bir klon ( depthparam kullanarak ) yaptığınızda yapmak için yararlı olabilir ve şimdi error: pathspec 'another_branch' did not match any file(s) known to gityukarıda önerilen komutları kullanarak başka bir uzak dalı neden alamadığınızı merak ediyorsunuz . Kesinlikle asıl sorunun ne olduğu bu değildi ama başkalarının kafalarını çizmelerine yardımcı olabilir.
luciash d 'varlık

0

Bunu bir şubeyi başka bir kişiye geçirmek için kullanıyorum, çekicilik gibi benim için çalışıyor.

git switch [branchName] VEYA git checkout [branchName]

örnek: git switch geliştirme VEYA
git checkout geliştirme

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.