artık olmayan uzak dalı gösteren 'git branch -av'


168

Bu muhtemelen aptalca bir soru, ama git için yepyeni ve artık var olmayan uzak bir dal görüyorum.

$ git branch -a
* master
  remotes/origin/master
  remotes/origin/production

Üretim şubesinin uzaktan var olduğuna inanmıyorum ve neden hala yerel olarak gösterildiğini anlayamıyorum. Bu dalı nasıl silebilirim / kaldırabilirim? İşte kaldırma girişimi şöyle:

$ git push origin :production

error: unable to push to unqualified destination: production
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@IP:puppet.git'

Sözde uzak üretim şubesini kontrol edebilirim, ancak şunu elde ederim:

$ git checkout origin/production
Note: checking out 'origin/production'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at c323996... added powerdns module, no really

Ne halt yaptığımı hiç bilmiyorum. Herhangi bir yardım mutluluk duyacağız.


git branch -asonra bir çıktı git fetchnedir?
alediaferia


Önerdiğim mükerrer cevap burada manojlds daha çok açıklıyor.
Cascabel

Yanıtlar:


338

Yapmak zorundasın:

git remote prune origin

8
Teşekkürler çalıştı! Perde arkasında neler olup bittiğini açıklayabilir misiniz?
CarpeNoctem

12
Bunlar yerel repodaki uzaktan izleme dallarıdır ve uzak repodaki şubeler silinirse bunları temizlemeniz gerekir.
2012'de

2
Nadiren böyle basit bir soru ve cevabı çok çabuk bulur ve uygularım.
jleach

Süper bir.Yerelde, kod tabanı repo ile hiçbir bağlantısı olmayan garip dalları görüyordum. Bu komutu çalıştırdığımda, yerel menşei şubemi ayarladım ve sonra yukarı akış ustası ekledim. Teşekkürler
Ankur Srivastava

54

Yani iki sorun var. Her iki durumda da Git'in dağıtıldığını unutmayın.

İlk. Gibi şeyler yaptığınızda

$ git branch -a

işlem uzak bilgisayarda değil yerel deponuzda gerçekleştirilir. Başka bir deyişle, yerel repo bildiğiniz tüm şubeleri rapor ediyor. Bu ( 'ana' gibi) yerel dalları ya da sahip olduğu uzak dalları olabilir getirilen bir uzaktan kumandadan. Son getirmeden bu yana, uzak repo'nun 'üretim' dalı değişti, ancak yerel repo bunu bilmiyor. Manojldlerin cevabı doğrudur. Çalıştırmak

$ git uzaktan erik kaynağı

bayat dalları kaldırmak için.

'Git push origin: production' komutu, şubeyi uzak bilgisayarın git deposundan silmek için kullanılır. Yerel deponuz değil. Bu durumda, uzak bilgisayarın git repo'sundaki dalı daha önce silmiş olduğundan, bu hata iletisini görürsünüz.

İşte bu komutları özetleyen bir bağlantı .

İkinci sorun ödeme ile ilgilidir.

Bir şubeyi kontrol ederken, bunu uzak şubeden değil, yerel bir şubeden yapmak istersiniz . Bu yüzden müstakil bir KAFA ile ilgili hatayı alıyorsunuz. Repo git-notlar kanlı ayrıntılı olarak problemin iyi açıklaması var. Temel olarak anahtar kelime

Ancak, uygun, yerel, şube adı olmayan bir şeyi teslim aldığınızda, HEAD artık hiçbir şeye sembolik bir referans değildir. Bunun yerine, aslında geçmekte olduğunuz taahhüdün SHA-1 karmasını (taahhüt kimliği) içerir.

Şimdi, uzak dal ile aynı olan yerel bir dalı nasıl kontrol edebilirim?

Kolay, ödeme uzak şube sırasında, yerel bir şube oluşturmak.

$ git checkout -b my_local_branch orijin / üretim


20
git remote prune origin

doğru, sadece --dry-runyerel repodan hangi dalların budanacağını bildiren seçeneği kullanabilirsiniz , ancak aslında onları budamaz

git remote prune origin --dry-run
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.