HEAD
- Okunuşu
- hed
Kısaca
HEAD, Git'te checkout edilmiş olanı, normalde bulunduğunuz branch'i gösteren işaretçidir; o branch da son commit'ini gösterir, yeni commit'ler oraya eklenir.
Git'te HEAD nedir?
Git, HEAD'i .git/HEAD dosyasında saklar. Çoğu zaman bu dosya ref: refs/heads/main gibi bir branch'e referans içerir; yani HEAD "üzerinde olduğum branch'in ucu" demektir. Commit yaptığınızda branch yeni commit'e ilerler ve HEAD de onunla birlikte hareket eder, çünkü branch'i izler.
HEAD, göreli referansların da başlangıç noktasıdır. HEAD~1 mevcut commit'in ebeveyni, HEAD~3 üç commit öncesi, HEAD^2 de bir merge commit'inin ikinci ebeveynidir. Komutlar onu her yerde kullanır: git diff HEAD son commit'ten beri yapılan bütün değişiklikleri gösterir, git reset --soft HEAD~1 son commit'i geri alır ama değişikliklerini staged olarak tutar, git show HEAD de en son commit'i gösterir.
Yerel bir branch yerine doğrudan bir commit'i, etiketi ya da uzak bir branch'i checkout ederseniz HEAD doğrudan bir commit'i gösterir. Bu bir detached HEAD'dir: etrafa bakabilir, hatta commit de yapabilirsiniz, ama bu commit'ler hiçbir branch'e ait olmaz ve kolayca kaybolur; onları tutmak istiyorsanız git switch -c ile bir branch oluşturun.
Sık yapılan bir yanlış, HEAD'in her zaman depodaki en son commit anlamına geldiğini düşünmektir. Yalnızca şu anda nerede olduğunuzdur. Git ayrıca ilgili işaretçiler de tutar: reset ve rebase gibi riskli işlemlerden önce ayarlanan ve geri dönebilmenizi sağlayan ORIG_HEAD ile son fetch'in getirdiklerini kaydeden FETCH_HEAD.
Önemli noktalar
- HEAD, checkout edilmiş olanı, normalde mevcut branch'i gösterir.
- Yeni commit'ler HEAD'in gösterdiği yere eklenir ve branch'i ilerletir.
- HEAD~1, HEAD~3 ve HEAD^2 ona göre commit'leri gösterir.
- HEAD'i doğrudan bir commit'e yönlendirmek detached HEAD'e yol açar.
- ORIG_HEAD ve FETCH_HEAD, Git'in otomatik ayarladığı ilgili işaretçilerdir.
Örnek
cat .git/HEAD
# ref: refs/heads/main ← HEAD follows the main branch
git log --oneline -3
# 9f2c1ab (HEAD -> main) Add search
# 41d0e77 Fix login redirect
# c83b5a2 Initial commit
git show HEAD~1 --stat # the commit before the latest
git diff HEAD # everything changed since the last commit
git reset --soft HEAD~1 # undo the last commit, keep its changes stagedSık sorulan sorular
HEAD~1 ne demek?
HEAD'in gösterdiği commit'in ebeveyni, yani geçmişte bir adım geri. HEAD~2 iki adım geridir ve böyle devam eder. İki ebeveyni olan merge commit'lerinde HEAD^2 ikinci ebeveyni seçer.
Detached HEAD nedir?
HEAD'in bir branch yerine doğrudan bir commit'i gösterdiği durumdur; örneğin bir etiketi ya da eski bir commit'i checkout ettikten sonra. Orada yapılan commit'ler, siz bir branch oluşturana kadar hiçbir branch'te değildir.
HEAD ile main arasındaki fark nedir?
main bir branch'tir: bir commit'i gösteren bir işaretçi. HEAD ise o anda üzerinde olduğunuz branch'i gösterir. main üzerindeyken ikisi aynı commit'i gösterir, ama branch değiştirdikten sonra HEAD yeni branch'i gösterir.
İlgili sayfalar
- Detached HEADSürüm Kontrolü, s. 7Detached HEAD, bir branch yerine belirli bir commit'i checkout ettiğiniz ve yaptığınız yeni commit'lerin hiçbir branch'e ait olmadığı bir Git durumudur.
- BranchSürüm Kontrolü, s. 2Git'te branch, bir özellik ya da düzeltme üzerinde, birleştirene kadar ana kodu etkilemeden çalışmanızı sağlayan bağımsız bir geliştirme hattıdır.
- CommitSürüm Kontrolü, s. 5Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
- Git ResetSürüm Kontrolü, s. 20Git reset, mevcut branch'i daha eski bir commit'e geri taşıyan ve moduna göre staging area'yı ile dosyalarınızı da sıfırlayabilen bir Git komutudur.
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- Git CheckoutSürüm Kontrolü, s. 12git checkout başka bir branch'e ya da commit'e geçer veya dosyaları önceki sürüme döndürür; yeni Git sürümleri bu işleri git switch ve git restore'a ayırır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin