Git Nedir – Nasıl kullanılır

Git, bir sürüm kontrol sistemi olarak bilinir. Bu, kod veya belgeler üzerinde yapılan değişiklikleri takip etmek, yönetmek ve paylaşmak için kullanılır. Git’in amacı, bir projenin farklı sürümlerini saklamak ve yönetmek, böylece bir hata veya kayıp durumunda geri dönebilmektir.
Git’in temel kavramları şunlardır:
- Repository: Git projesinin tüm sürümlerinin depolandığı yerdir. Bir Git deposu, proje dosyalarını ve geçmişte yapılan tüm değişiklikleri içerir.
- Commit: Bir Git deposundaki değişiklikleri kaydetmek için kullanılır. Her commit, bir açıklama ile birlikte kaydedilen dosyaların bir sürümünü temsil eder.
- Branch: Bir Git deposunun farklı sürümlerinin ayrıldığı yoldur. Branch’ler, farklı özelliklerin veya değişikliklerin denendiği veya birleştirildiği ayrı ayrı çalışma alanlarıdır.
- Merge: Bir Git deposundaki farklı branch’lerin birleştirilmesi işlemidir. Bu, farklı branch’lerde yapılan değişiklikleri bir araya getirerek bir ana sürüm oluşturur.
- Remote: Bir Git deposunun uzak bir sunucuda saklandığı durumlarda kullanılan terimdir. Bu, projenin farklı kişiler tarafından erişilebilir hale getirilmesini sağlar.
Git kullanmak için, öncelikle bir Git deposu oluşturmanız gerekir. Daha sonra, dosyalarınızı ve değişikliklerinizi kaydetmek için commit yapmanız gerekir. Branch’lerinizi oluşturabilir, değişiklikleri birleştirebilir ve uzak sunuculara yükleyebilirsiniz.
Repository
Repository (depot veya repo olarak da bilinir), Git tarafından kullanılan bir terimdir ve bir projenin tüm dosyalarının ve değişikliklerinin depolandığı yerdir. Bir repository, projenin tüm sürümlerinin, tarihçesinin, dallarının ve değişikliklerinin takip edilmesini sağlar.
Bir repository, dosyaların ve değişikliklerin kaydedildiği bir veritabanıdır. Her repository, kendine özgü bir URL’ye sahiptir ve bu URL, projeye erişim sağlar. Git, yerel bir repository ve uzak bir repository arasında değişikliklerin senkronize edilmesini sağlar. Bu, bir takım işbirliği gerektiren projelerde çok önemlidir.
Her repository, bir ana dal (master veya main) ve diğer dallar (branch) içerebilir. Ana dal, projenin en son sürümünü içerirken, diğer dallar, projenin farklı sürümlerinin geliştirilmesi veya test edilmesi için kullanılır. Her bir dal, birbirinden bağımsız olarak geliştirilebilir ve değişiklikler diğer dallara uygulanmadan önce test edilebilir.
Git’te, yeni bir repository oluşturmak için git init
komutu kullanılır. Ayrıca, bir repository’yi kopyalamak ve yerel bilgisayarda çalışmak için git clone
komutu kullanılabilir. Uzak bir repository’ye değişiklikler göndermek için git push
komutu kullanılırken, uzak bir repository’den değişiklikleri almak için git pull
komutu kullanılır.
Commit
Git Commit, Git deposuna yapılan değişiklikleri kalıcı olarak kaydetmenin bir yoludur. Bir Commit, bir projede yapılan değişiklikleri içeren bir sürüm olarak düşünülebilir. Bir Commit, ayrıca bir açıklama ile birlikte kaydedilen dosyaların bir anlık görüntüsünü temsil eder.
Bir Commit oluşturmak için, öncelikle bir değişiklik yapmanız gerekir. Bu, bir dosyayı düzenlemek veya yeni bir dosya oluşturmak gibi bir şey olabilir. Ardından, değişikliklerinizi git stage komutuyla “sahnede” hazır hale getirirsiniz. Bu, dosyaların Commit öncesindeki son halini gösterir. Daha sonra, git commit komutunu kullanarak sahnedeki değişiklikleri kalıcı olarak kaydedersiniz. Commit sırasında bir açıklama yazmanız gerekir, böylece hangi değişikliklerin yapıldığını açıklayabilirsiniz.
Aşağıda bir örnek gösterilmiştir:
git add dosya1.txt
git add dosya2.txt
git commit -m "Bu Commit ile dosya1.txt ve dosya2.txt güncellendi"
Bu örnekte, dosya1.txt ve dosya2.txt dosyaları git add komutuyla sahneye eklenir ve ardından git commit komutuyla kaydedilir. Ayrıca, Commit için bir açıklama da belirtilir.
Git Commit’in bir diğer önemli özelliği, her Commit’in kendine özgü bir kimliği (ID) olduğudur. Bu kimlik, bir Commit’in benzersiz olmasını sağlar ve projedeki farklı sürümleri ayırt etmek için kullanılabilir. Ayrıca, bir Commit’in geri alınması veya değiştirilmesi gerektiğinde kullanılabilir.
Git Commit, bir projedeki değişikliklerin takibi ve yönetimi için önemli bir adımdır. Doğru açıklama yazmak, diğer kullanıcıların projedeki değişiklikleri daha iyi anlamalarına yardımcı olur ve her Commit’in belirli bir amacı olduğunu gösterir.
Commit Amend
Git Commit mesajını düzenlemek, bir önceki Commit mesajını değiştirmek veya tamamen yeni bir Commit mesajı oluşturmak istediğinizde kullanılır. Bu işlem, son Commit’inizi değiştirmek istediğiniz durumlarda yararlı olabilir.
Git Commit mesajını düzenlemek için, öncelikle son Commit’inizi belirlemeniz gerekir. Bunu yapmak için git log
komutunu kullanabilirsiniz.
Bu komutla tüm Commit geçmişinizi görüntüleyebilirsiniz. Son Commit’inizin kimliğini (ID) bulun ve aşağıdaki komutu kullanarak Commit mesajını düzenleyin:
git commit --amend
Bu komut, önceki Commit’in mesajını değiştirmenize izin verir. Bu komutu çalıştırdıktan sonra, metin editörünüz (varsayılan olarak nano veya vim) açılacak ve yeni Commit mesajınızı yazmanızı sağlayacaktır. Mesajınızı düzenledikten sonra, kaydedip çıkın.
Ayrıca, git commit --amend
komutunu kullanarak bir önceki Commit’e yeni dosyalar da ekleyebilirsiniz. Bunu yapmak için, önce yeni dosyaları git stage komutuyla sahneye ekleyin ve ardından git commit --amend
komutunu kullanarak yeni dosyaları ekleyin. Böylece, önceki Commit’e yeni dosyalar eklenmiş olur.
Örneğin:
git add dosya3.txt
git commit --amend
Bu komutları kullanarak, son Commit’in mesajını düzenleyebilir ve hatta yeni dosyalar da ekleyebilirsiniz.
Ancak, bu işlemi gerçekleştirdikten sonra, Commit’iniz değiştiği için, bu Commit’i paylaşmışsanız (örneğin bir ortak çalışma alanında çalışıyorsanız) Commit’i tekrar paylaşmanız gerekebilir. Bununla birlikte, eğer Commit henüz paylaşılmamışsa, bu işlemi gerçekleştirmenizde herhangi bir sorun olmayacaktır.
Sonuç olarak, Git Commit mesajını düzenlemek, geçmişte yaptığınız bir hatayı düzeltmek veya daha iyi bir açıklama yazmak istediğinizde kullanışlı bir işlemdir.
Commit Reset
Git Reset, yapılan Commit işlemlerini geri almak için kullanılan bir Git komutudur. Bu işlem, son değişikliklerinizi kaydettikten sonra geri dönmek istediğiniz veya yanlışlıkla bir dosyayı sahneye eklediğiniz veya Commit ettiğiniz durumlarda yararlı olabilir.
Git Reset komutu, çalışma alanınızı ve Git deposunuzu geri yüklemek için kullanılır. Üç farklı seçeneği vardır:
- –soft: Bu seçenek, son Commit işleminizi iptal eder, ancak dosyalarınızı sahneye geri getirir. Yani, dosyalarınızda yaptığınız değişiklikler kaybolmaz ve yeniden Commit işlemi için hazırdırlar.
- –mixed: Bu seçenek, son Commit işlemini ve sahneye eklenmiş dosyalarınızı iptal eder, ancak dosyalarınızda yaptığınız değişiklikleri korur. Dosyalarınızı sahneye eklemek için yeniden git add komutunu kullanmanız gerekir.
- –hard: Bu seçenek, son Commit işlemini, sahnedeki dosyaları ve dosyalardaki değişiklikleri de iptal eder. Dosyalardaki tüm değişiklikler kaybolur ve bu geri alınan değişiklikler geri getirilemez.
Örneğin, son Commit’inizi geri almak ve dosyalarınızı sahnedeki hallerine geri yüklemek istiyorsanız, aşağıdaki komutları kullanabilirsiniz:
git reset --soft HEAD~1
Bu komut, son Commit işleminizi geri alacak, ancak dosyalarınızı sahneye geri yükleyecektir. Dosyalarınızda yaptığınız değişiklikler hala kaydedilir ve yeniden Commit işlemi için hazırdırlar.
Eğer son Commit işleminizi ve sahnedeki dosyaları geri almak istiyorsanız, aşağıdaki komutları kullanabilirsiniz:
git reset HEAD~1
Bu komut, son Commit işleminizi ve sahnedeki dosyalarını geri alacak, ancak dosyalarınızda yaptığınız değişiklikleri kaybetmeyecektir. Dosyalarınızı sahneye eklemek için yeniden git add komutunu kullanmanız gerekir.
Son olarak, son Commit işleminizi, sahnedeki dosyaları ve dosyalardaki değişiklikleri de geri almak istiyorsanız, aşağıdaki komutları kullanabilirsiniz:
git reset --hard HEAD~1
Bu komut, son Commit işleminizi, sahnedeki dosyaları ve dosyalardaki değişiklikleri de geri alacaktır. Dosyalardaki tüm değişiklik
Commit Revert
Git Revert, daha önceki bir Commit işleminin geri alınmasını değil, tersine çevrilmesini sağlayan bir Git komutudur. Bu işlem, hatalı bir Commit işlemi veya yanlış bir değişikliğin geri alınmasını gerektiğinde yararlıdır. Revert işlemi, geri alınan değişiklikleri yeni bir Commit işlemi olarak kaydeder ve Git geçmişindeki değişiklikleri takip etmeye devam eder.
Git Revert, geri almak istediğiniz Commit işleminin kimlik numarasını kullanarak yapılır. Bu işlem sonrasında, Revert işlemi için yeni bir Commit işlemi oluşturulur ve geri alınan değişiklikler bu yeni Commit işlemi içinde saklanır.
Örneğin, son Commit işleminizi geri almak istiyorsanız ve yeni bir Commit işlemi oluşturarak geri alınan değişiklikleri kaydetmek istiyorsanız, aşağıdaki komutları kullanabilirsiniz:
git revert HEAD
Bu komut, son Commit işlemini geri alacak ve geri alınan değişiklikleri yeni bir Commit işlemi olarak kaydedecektir.
Eğer belirli bir Commit işlemini geri almak istiyorsanız, o Commit işleminin kimlik numarasını kullanmanız gerekir. Örneğin, geri almak istediğiniz Commit işleminin kimlik numarası abcdefg ise, aşağıdaki komutları kullanabilirsiniz:
git revert abcdefg
Bu komut, belirtilen Commit işlemini geri alacak ve geri alınan değişiklikleri yeni bir Commit işlemi olarak kaydedecektir.
Git Revert işlemi, geri alınan değişikliklerin neden geri alındığını ve ne zaman geri alındığını belirtmek için bir açıklama girmenizi isteyecektir. Bu açıklamayı girmek için bir metin editörü açılacaktır. Açıklamayı yazdıktan sonra, dosyayı kaydedip kapatmanız gerekiyor.
Git Revert, geri alınan değişiklikleri birleştirmek için bir çatışma oluşursa, bu çatışmayı çözmenizi isteyecektir. Bu durumda, değişiklikleri manuel olarak birleştirmeniz gerekebilir. Bu, Git Revert işlemiyle geri alınan değişikliklerin, orijinal değişikliklerden farklı olmasına neden olabilir.
Branch
Git, farklı geliştirme iş akışlarını yönetmek için Branch (Dallanma) adı verilen bir mekanizma sağlar. Branch, kaynak kodunu belirli bir noktada kopyalayarak, projenin farklı bir versiyonunu oluşturmanıza olanak tanır. Bu mekanizma sayesinde, birden fazla geliştirici aynı projede çalışabilir ve değişikliklerini ayrı ayrı Branch’lerde yapabilirler.
Her Git deposu, en az bir tane ana Branch (genellikle “master” olarak adlandırılır) içerir. Bu ana Branch, projenin ana hatlarını içerir ve her zaman projenin stabil bir sürümünü temsil eder. Diğer Branch’ler ise, ana Branch’den ayrılarak farklı geliştirme iş akışlarını temsil ederler.
Git, Branch’leri oluşturmak ve arasında geçiş yapmak için çeşitli komutlar sağlar. İşte bazı temel Branch işlemleri:
Branch Oluşturma
Yeni bir Branch oluşturmak için, git branch
komutunu kullanabilirsiniz. Örneğin, yeni bir Branch oluşturmak için:
git branch yeni-branch
Bu komut, “yeni-branch” adlı yeni bir Branch oluşturacak, ancak şu anki Branch’te kalacaktır.
Branch Değiştirme
Şu anda hangi Branch’te olduğunuzu görmek için git branch
komutunu kullanabilirsiniz. Mevcut Branch’ten başka bir Branch’e geçmek için, git checkout
komutunu kullanabilirsiniz. Örneğin, mevcut Branch’ten “yeni-branch” adlı bir Branch’e geçmek için:
git checkout yeni-branch
Bu komut, “yeni-branch” adlı Branch’e geçecektir. Bu Branch’te yaptığınız değişiklikler, yalnızca bu Branch üzerinde kaydedilir.
Branch Silme
Bir Branch’i silmek için, git branch -d
komutunu kullanabilirsiniz. Örneğin, “yeni-branch” adlı Branch’i silmek için:
git branch -d yeni-branch
Bu komut, yeni-branch adlı Branch’i silecektir. Ancak, bu Branch üzerinde yaptığınız değişiklikler kaybolabilir. Bu nedenle, Branch silme işlemi öncesinde, üzerinde çalışılan Branch’teki değişikliklerin başka bir Branch veya yedeğe kaydedildiğinden emin olunması gerekir.
Branch’ler, geliştirme iş akışlarının yönetimi için çok kullanışlıdır. Git, Branch’ler arasında geçiş yapmak, farklı Branch’lerin birleştirilmesi veya Branch’ler arasında değişikliklerin taşınması gibi birçok işlemi kolaylaştırır.
Branch Merge
Branch Merge, bir Git projesindeki farklı Branch’lerin birleştirilmesi işlemidir. Bu işlem, farklı geliştirme iş akışlarının yönetilmesine ve değişikliklerin projenin ana hatlarına dahil edilmesine yardımcı olur.
Git, Branch Merge işlemini gerçekleştirmek için iki temel yöntem sunar: Fast-Forward Merge ve Recursive Merge.
Fast-Forward Merge
Fast-Forward Merge, iki Branch arasında herhangi bir çakışma olmadığında kullanılır. Bu durumda, Git, hedef Branch’in işaretçisini kaynak Branch’e doğru hareket ettirir. Bu işlem, sadece birkaç komutla gerçekleştirilebilir. Örneğin, yeni-branch adlı Branch’in, master adlı Branch ile birleştirilmesi işlemi şu şekilde gerçekleştirilir:
git checkout master
git merge yeni-branch
Bu komutlar, yeni-branch adlı Branch’in, master adlı Branch ile birleştirilmesini sağlayacaktır.
Recursive Merge
Recursive Merge, iki Branch arasında çakışma olduğunda kullanılır. Bu durumda, Git, otomatik olarak değişiklikleri birleştirmek için birleştirme stratejisi kullanır. Bu strateji, farklı çakışma senaryolarına göre değişebilir. Örneğin, yeni-branch adlı Branch’in, master adlı Branch ile birleştirilmesi işlemi şu şekilde gerçekleştirilir:
git checkout master
git merge yeni-branch
Bu komutlar, yeni-branch adlı Branch’in, master adlı Branch ile birleştirilmesini sağlayacaktır. Eğer iki Branch arasında değişikliklerde çakışma varsa, Git, değişiklikleri birleştirir ve çakışmaları çözmek için gerekli düzenlemeleri yapar.
Branch Merge işlemi, projelerin yönetimi için çok önemlidir. Bu işlem, farklı geliştirme iş akışlarının birleştirilmesine, değişikliklerin projenin ana hatlarına dahil edilmesine ve projenin stabil bir sürümünün oluşturulmasına yardımcı olur.
Stash
Git stash, çalışma klasöründeki değişiklikleri geçici olarak saklamak için kullanılan bir Git komutudur. Bu komut, kullanıcının başka bir işlem için mevcut değişiklikleri kaydetmesine ve daha sonra geri dönmesine olanak tanır.
Stash, Git’te 3 farklı bileşen içerir: the working directory (çalışma dizini), the staging area (hazırda bekleyen dosyalar) ve the commit history (önceki commit geçmişi). Git stash, bu üç bileşenin tümünü kaydetmenize olanak tanır.
Stash oluşturmak için, projenin çalışma klasöründeki değişiklikleri ve hazırda bekleyen dosyaları geçici olarak saklamak istediğiniz zaman “git stash” komutunu kullanabilirsiniz. Bu komut, geçici bir stash oluşturur ve çalışma dizininizdeki tüm değişiklikleri ve hazırda bekleyen dosyaları temizler.
git stash
Stash’i geri yüklemek için git stash apply
komutunu kullanabilirsiniz. Bu komut, en son stash’i geri yükler. Eğer birden fazla stashiniz varsa, hangi stash’i geri yüklemek istediğinizi belirtmeniz gerekir.
git stash apply
Stash’inizi kontrol etmek için git stash list
komutunu kullanabilirsiniz. Bu komut, mevcut stash’lerin bir listesini görüntüler.
git stash list
Stash’i silmek için git stash drop
komutunu kullanabilirsiniz. Bu komut, en son stash’i siler. Eğer birden fazla stash’iniz varsa, hangi stash’i silmek istediğinizi belirtmeniz gerekir.
git stash drop
Stash’i geri yükleyip silmek için git stash pop
komutunu kullanabilirsiniz. Bu komut, en son stash’i geri yükler ve ardından siler. Eğer birden fazla stash’iniz varsa, hangi stash’i geri yüklemek istediğinizi belirtmeniz gerekir.
git stash pop
Git stash, projelerin yönetimi için oldukça yararlı bir araçtır. Bu komut, kullanıcının çalışma klasöründeki değişiklikleri geçici olarak saklamasına olanak tanır ve daha sonra geri dönmek istediğinde kolayca geri yüklemesine olanak tanır.
Conflict
Git’te “conflict” veya “çakışma”, birleştirme (merge) işlemi sırasında farklı dallarda yapılmış değişikliklerin birleştirilmesinde ortaya çıkan bir durumdur. Bu durumda, Git, birleştirme işlemini otomatik olarak tamamlayamaz ve çakışmaları çözmek için kullanıcının müdahale etmesi gerekmektedir.
Birleştirme işlemi sırasında, Git, iki farklı dalda yapılmış olan değişiklikleri karşılaştırır ve eğer aynı dosyaların aynı satırları değiştirilmişse bir çakışma durumu meydana gelir. Bu durumda, Git, çakışmaları belirleyemez ve kullanıcıya hangi değişiklikleri birleştirmek istediğini sorar.
Git, bu durumu çözmek için kullanıcılara birkaç farklı seçenek sunar. Bunlar:
- Manuel çözüm: Kullanıcılar, çakışan dosyaları açabilir ve elle çakışmaları çözebilirler. Bu seçenek, kullanıcılara en fazla esnekliği sağlar ve birleştirme işlemi sırasında oluşan çakışmaları tamamen kontrol etmelerini sağlar.
git mergetool
kullanarak araç tabanlı çözüm: Bu seçenek, kullanıcılara, birleştirme işlemini kolaylaştırmak için bir dizi araç sunar. Kullanıcılar, bir araç seçebilir ve çakışmaları otomatik olarak çözmesine izin verebilirler.git add
kullanarak otomatik çözüm: Bu seçenek, kullanıcılara, Git’in otomatik olarak çakışmaları çözmesine izin verir. Bu, sadece çakışan dosyaların farklı satırlarını birleştirirken değişikliklerin bir kısmının kaybolmasına neden olabilir.
Çakışmaları çözmek için adımlar şu şekildedir:
- Çakışan dosyaları tespit etmek:
git status
komutu kullanılarak, çakışan dosyaların listesi görüntülenebilir.
git status
- Çakışmaları çözmek için birleştirme aracını kullanmak:
git mergetool
komutu, kullanıcılara bir araç seçimi yapma imkanı verir.
git mergetool
- Manuel çözüm yapmak: Çakışan dosyalar elle açılıp değiştirilebilir.
- Çakışmaları işaretlemek:
git add
komutu, çakışan dosyaların elle çözülmesi gereken birleştirme işleminin tamamlandığını işaretlemek için kullanılabilir.
git add <dosya
Umarım faydalı bir içerik olmuştur. Yeni yazılarda buluşmak dileğiyle 🙋🏻♂️