Öncelikle sorunuzun biraz yanlış anlama gösterdiğini unutmayın. origin / HEAD, uzaktan kumandadaki varsayılan dalı , yani orijini çağırdığınız uzak depodaki HEAD'i temsil eder . Reponuzdaki şubeleri değiştirdiğinizde bunu etkilemezsiniz. Aynısı uzak dallar için de geçerlidir; repo'nuzda olabilir masterve origin/masterburada deponuz, uzak depodaki şubenin origin/masteryerel bir kopyasını temsil eder master.
başlangıç noktası HEAD yalnızca siz veya bir başkası uzak depoda gerçekten değiştirirse değişecektir , bu temelde asla gerçekleşmemelidir - varsayılan dalın genel dalın sabit dalda (muhtemelen ana) sabit kalmasını istersiniz. origin / HEAD, uzak depodaki HEAD'ın yerel bir kopyasını temsil eden yerel bir ref. (Tam adı refs / uzaktan kumandalar / orijin / KAFA'dır.)
Yukarıdaki bilgilerin aslında bilmek istediklerinizi cevapladığını düşünüyorum, ancak devam etmek ve açıkça sorduğunuz soruyu cevaplamak için ... bir depoyu klonladığınızda orijin / HEAD otomatik olarak ayarlanır ve bu konuda. Garip, bu oluyor o değil gibi komutlar tarafından belirlenen git remote update- Ben manuel olarak değişiklik eğer değişecek tek yol olduğuna inanıyoruz. (Değişim demek istediğim farklı bir dalı işaret ediyor; açıkçası bu şube değişirse değişikliklere işaret ediyor, bu getirme / çekme / uzaktan güncellemede olabilir.)
Düzenleme : Aşağıda tartışılan sorun Git 1.8.4.3'te giderilmiştir ; bu güncellemeye bakın .
Yine de küçük bir uyarı var. HEAD sembolik bir ref'dir, doğrudan bir taahhüt yerine bir şubeye işaret eder, ancak git uzaktan aktarım protokolleri sadece ref için taahhütte bulunur. Git, HEAD ve diğer tüm referansların işaret ettiği taahhüdün SHA1'ini biliyor; daha sonra aynı taahhüde işaret eden bir şube bularak HEAD'ın değerini çıkarmalıdır. Bu, iki dalın oraya işaret etmesi durumunda belirsiz olduğu anlamına gelir. (Mümkünse efendiyi seçtiğine, ardından alfabetik olarak ilk sıraya düştüğüne inanıyorum.) Bunun çıktısında bildirildiğini göreceksiniz git remote show origin:
$ git remote show origin
* remote origin
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
foo
master
Tuhaf bir şekilde, HEAD kavramı bu şekilde yazdırılmış olsa da, uzaktan kumandadaki şeyler değişirse (örn. Foo kaldırılırsa), aslında güncellenmez refs/remotes/origin/HEAD. Bu gerçekten garip durumlara yol açabilir. Yukarıdaki örnekte, origin / HEAD'ın aslında foo'ya işaret ettiğini ve orijinallerin foo dalının kaldırıldığını varsayalım. Sonra bunu yapabiliriz:
$ git remote show origin
...
HEAD branch: master
$ git symbolic-ref refs/remotes/origin/HEAD
refs/remotes/origin/foo
$ git remote update --prune origin
Fetching origin
x [deleted] (none) -> origin/foo
(refs/remotes/origin/HEAD has become dangling)
Uzak gösteri HEAD'ın usta olduğunu bilmesine rağmen, hiçbir şey güncellemiyor. Eski foo dalı doğru budanır ve HEAD sarkar (var olmayan bir dalı işaret eder) ve yine de master'ı işaret edecek şekilde güncellemez. Bunu düzeltmek istiyorsanız, git remote set-head origin -abaşlangıç noktasının başlığını otomatik olarak yukarıdaki gibi belirleyen ve daha sonra aslında başlangıç / BAŞLIK'ı uygun uzak dalı işaret edecek şekilde ayarlayan kullanın.
refs/origin/HEAD. Bir havuzun kendi sembolik referansının nasılHEADayarlandığı ile ilgili değildir.