Yanıtlar:
HEAD
mevcut komiteye (doğrudan veya dolaylı, yani sembolik) atıftır. Bu, çalışma dizininde kontrol ettiğiniz bir taahhüttür (bazı değişiklikler veya eşdeğer bir değişiklik yapmadığınız sürece) ve bunun üzerine "git commit" in yeni bir tane oluşturacağı bir taahhüttür. Genellikle HEAD
diğer bazı dallara sembolik referanstır; bu dal şu anda kullanıma alınmış dal veya geçerli dal. HEAD
doğrudan bir taahhüdü de gösterebilir; bu duruma "müstakil KAFA" denir ve isimsiz, anonim dalda olduğu anlaşılabilir.
Ve @
yalnız için bir kısayol HEAD
, Git 1.8.5 beri
ORIG_HEAD
önceki halidir HEAD
onları geri kolay olacak şekilde, muhtemelen tehlikeli davranışa sahip komutlarla seti. Bu Git reflog sahip olduğunu şimdi daha az yararlıdır: HEAD@{1}
eşdeğerdir ORIG_HEAD
( HEAD@{1}
son değeri her zaman olduğu HEAD
, ORIG_HEAD
son değer HEAD
tehlikeli operasyon öncesi).
Daha fazla bilgi için git (1) manpage , Git Kullanım Kılavuzu , Git Topluluk Kitabı ve Git Sözlüğü'nü okuyun
HEAD
ve dahil ORIG_HEAD
) başvurmak için tüm yolları açıklar .
Gönderen git reset
"çekme" veya "birleştirme" her zaman geçerli dalın orijinal ucunu bırakır
ORIG_HEAD
.
git reset --hard ORIG_HEAD
Sabit bir şekilde sıfırlamak, dizin dosyanızı ve çalışma ağacını bu duruma geri getirir ve dalın ucunu bu taahhüdüne sıfırlar.
git reset --merge ORIG_HEAD
Birleşmenin sonucunu inceledikten sonra, diğer daldaki değişikliğin tatmin edici olmadığını görebilirsiniz. "
git reset --hard ORIG_HEAD
" Çalıştırıldığında bulunduğunuz yere geri dönersiniz, ancak istemediğiniz yerel değişikliklerinizi atar. "git reset --merge
" yerel değişikliklerinizi tutar.
Herhangi bir düzeltme eki uygulanmadan önce, ORIG_HEAD geçerli dalın ucuna ayarlanır.
Birden fazla işlemle ilgili sorun yaşıyorsanız, örneğin `git am
` yanlış dalda ' ' çalıştırmak veya işlemlerde posta kutusunu değiştirerek daha kolay düzeltilen bir hata varsa (örneğin, "Kimden:" satırlarında + hatalar).Ek olarak, birleştirme her zaman '
.git/ORIG_HEAD
' HEAD'in orijinal durumuna ayarlanır , böylece sorunlu bir birleştirme 'git reset ORIG_HEAD
' kullanılarak kaldırılabilir .
Not: buradan
HEAD hareketli bir işaretçi. Bazen mevcut dal anlamına gelir, bazen değil.
Yani HEAD zaten her yerde "mevcut şube" ile eşanlamlı DEĞİLDİR .
HEAD git'in her yerinde "akım" anlamına gelir , ancak mutlaka "akım dalı" (yani bağımsız HEAD) anlamına gelmez.
Ama neredeyse her zaman "mevcut taahhüt" anlamına gelir.
O "taahhüt olduğunugit commit
" üstüne oluşturur ve "git diff --cached
" "vegit status
" karşı karşılaştırın.
Bu, geçerli dalın yalnızca çok sınırlı bağlamlarda (tam olarak bir dal adının çalışmasını istediğimizde --- şubenin ipucunu taahhüt / rebase / vb. Yoluyla sıfırlamak ve büyütmek anlamına gelir) anlamına gelir.Reflog, zaman ve geri gitmek için kullanılan bir araçtır ve makineler, "akım" kavramıyla ilginç etkileşime sahiptir.
HEAD@{5.minutes.ago}
"ŞİMDİ SAĞLIKTA hangi branşta olduğumuzu öğrenmek için Dereference HEAD symref'i ve ardından bu dalın ucunun 5 dakika önce nerede olduğunu bulmak" anlamına gelebilir.
Alternatif olarak, "5 dakika önce HEAD olarak anılacağım taahhüt nedir?"
git1.8.4 (Temmuz 2013) tanıtır yeni bir gösterim tanıttı !
(aslında, 1.8.5 veya 1.9, 2013 4. Çeyrek için olacak: 9ba89f4 taahhüdü ile yeniden tanıtıldı )
Dört büyük harf "
HEAD
" yazmak yerine, "@
" şimdi,
örneğin "git log @
" diyebilirsiniz .
Bkz. Taahhüt cdfd948
'
HEAD
' Yazmak, özellikle '@
' kullanabildiğimizde ' ' sıkıcıdır .`
@
` Seçmenin nedeni ,ref@op
sözdiziminden (örn.HEAD@{u}
) Doğal olarak sözdiziminden kaynaklanmaması ve hiçbir operasyonumuz olmaması ve bunlara sahip olmadığımızda varsaymak mantıklıdır 'HEAD
'.Şimdi kullanabiliriz '
git show @~1
' ve tüm bu güzel iyilikleri.Şimdiye kadar '
@
' geçerli bir addı, ancak bu fikirle çelişiyor, bu yüzden onu geçersiz hale getirelim. Muhtemelen çok az insan, eğer varsa, bu ismi kullandı.
1.8.4-rc3 döneminde (14 Ağustos 2013) bir blog yazısı bu özelliğin geri alındığını ve ertelendiğini duyurdu ( Head -up için teşekkürler Cupcake ).
Yine, 9ba89f4 taahhüdü ile tekrar tanıtıldı (Eylül 2013).
Bkz. Taahhüt 2c2b664 :
@
için kısayol HEAD
"Bu geri dönüşler cdfd948'i uygular , çünkü sadece "
@
" (ve@{u}
ona uygulandığı gibi değiştiricileri olan formlar ) için geçerli değildir, aynı zamanda "refs/heads/@/foo
", etkilemesi gerekenleri de etkiler .Kısa el verme ile ilgili temel fikir iyi olabilir ve konu daha sonra tekrar denenebilir, ancak önümüzdeki kullanım için şimdilik mevcut kullanım durumlarını etkilemekten kaçınalım.
git reset
üretecektir ORIG_HEAD
. Bu yüzden rm
manuel olarak ihtiyacınız var . Örneğin, stackoverflow.com/a/12418078/6309 adresine bakın .
@
için takma HEAD
ediliyor (geçici?) Döndürüldü Git 1.8.4 serbest bırakılması için ! Bugün duyuruldu!
Benim anlayış HEAD mevcut dalı işaret ederken ORIG_HEAD "tehlikeli" operasyonlar yapmadan önce önceki HEAD saklamak için kullanılır olduğunu.
Örneğin git-rebase ve git-am, herhangi bir değişiklik yapmadan önce dalın orijinal ucunu kaydeder.
git branch foo -b
yetimler için bir şube oluşturmak için yaparsınız .
Gönderen man 7 gitrevisions
:
HEAD, çalışma ağacındaki değişiklikleri temel aldığınız taahhüdü adlandırır. FETCH_HEAD uzak git deposundan getirdiğiniz dalı son git getirme çağrınızla kaydeder. ORIG_HEAD, çalışmadan önce HEAD'in konumunu kaydetmek için HEAD'ınızı sert bir şekilde hareket ettiren komutlarla oluşturulur, böylece dalı çalıştırmadan önce dalın ucunu kolayca duruma geri döndürebilirsiniz. MERGE_HEAD git merge komutunu çalıştırdığınızda şubenize birleştirdiğiniz taahhütleri kaydeder. CHERRY_PICK_HEAD git cherry-pick komutunu çalıştırdığınızda kiraz toplama işini kaydeder.
HEAD
şimdi (yaklaşmakta olan git1.8.4) '@
'! Bkz aşağıda benim Düzenlenen cevabı