Git Nedir?
Git yazılım geliştirme projeleri için kullanılan bir sürüm kontrol sistemidir. Geliştiricilerin bir projenin kodlarını takip etmelerine, yapılan değişiklikleri kaydetmelerine, geri alma işlemleri yapmalarına, farklı sürümleri ve dalları yönetmelerine ve değişiklikleri diğer geliştiricilerle paylaşmalarına olanak tanır.
Git, dağıtık bir sürüm kontrol sistemi olduğundan her geliştiricinin yerel bir kopyası vardır ve bunlar birbirleriyle senkronize edilebilir. Bu da bir geliştiricinin değişiklikler yaparken diğerlerinin çalışmasını etkilememesini ve herhangi bir sorun yaşandığında geri alma işlemlerinin yapılabilmesini sağlar.
Git'in en temel yapısı "repository" olarak adlandırılan depolardan oluşur. Bir repository bir projenin tüm dosyalarını ve klasörlerini içeren bir yapıdır. Geliştiriciler bu yapıda değişiklikler yaparlar ve bu değişiklikler "commit" olarak adlandırılan işlemlerle kaydedilir. Commit işlemleri belirli bir zamandaki kodun tam bir görüntüsünü oluşturur ve kodun geçmişteki hallerine kolayca geri dönülmesini sağlar.
Git'in diğer önemli özellikleri arasında "branch" (dal) ve "merge" (birleştirme) işlemleri bulunur. Bir branch ana hat üzerinde ayrı bir kopya oluşturarak yeni özelliklerin veya düzeltmelerin yapılmasına izin verir. Merge işlemi iki veya daha fazla branch'in değişikliklerini birleştirmek için kullanılır.
Git birçok yazılım geliştirme ekosisteminde standart bir sürüm kontrol sistemi olarak kullanılmaktadır ve açık kaynak kodlu bir yazılımdır. Ayrıca, GitHub, Bitbucket ve GitLab gibi popüler bulut tabanlı Git servisleri de bulunmaktadır. Bunları da araştırmanızı ve en azından ne işe yaradıklarını öğrenmenizi tavsiye ederim.
Git Neden Kullanılmalı? Yazılımcılar İçin Niye Önemli?
Git, modern yazılım geliştirme süreçlerinin vazgeçilmez bir aracıdır ve birçok nedenle birçok kişi tarafından kullanılır ve kullanılmalıdır. İlk olarak Git değişiklikleri takip etmek ve yönetmek için etkili bir yoldur. Projenin geliştirme sürecinde herhangi bir aşamada geri dönüşler, hatalar ve eksiklikler ortaya çıkabilir. Git bir projenin herhangi bir aşamasında yapılan değişiklikleri kolayca takip etmenizi ve herhangi bir zamanda geri dönmenizi sağlar.
Git ayrıca birden fazla geliştiricinin aynı projede çalışmasını kolaylaştırır. Farklı geliştiricilerin aynı kod tabanı üzerinde çalışırken birinin yaptığı değişiklikler diğerlerinin çalışmasını etkileyebilir. Git geliştiricilerin birbirleriyle senkronize olmasını ve herkesin en son kod tabanı üzerinde çalışmasını sağlayarak bu tür sorunları ortadan kaldırır.
Git projelerin dağıtımını kolaylaştırır. Proje farklı birimlerde veya hatta farklı şirketler arasında çalışan geliştiriciler tarafından geliştirilebilir. Git projenin değişikliklerini takip etmenize ve projenin farklı versiyonlarını kolayca yönetmenize olanak tanır.
Sonuç olarak Git yazılım geliştirme sürecinde büyük bir fark yaratan bir araçtır. Git sayesinde geliştiriciler projelerini daha etkili bir şekilde yönetebilir, sorunları daha hızlı çözebilir ve daha verimli bir şekilde çalışabilir.
Git Kullanımı Nasıl Öğrenilir? Hangi Kaynaklar Kullanılmalı?
Git kullanımını öğrenmek için birçok kaynak mevcut. Bunlardan birkaçından (en önemlilerinden) bahsedeceğim.
Git Resmi Belgeleri: Git'in resmi belgeleri, kullanımını öğrenmek için harika bir kaynaktır. Git'in resmi belgeleri, tüm Git komutlarını ve Git kullanımı hakkında kapsamlı bilgi sağlar.
Video Dersleri: YouTube, Udemy, Bilge İş (ODTÜ) gibi platformlarda Git'i öğrenmek için video dersleri bulabilirsiniz. Birçok video dersi Git kullanımı hakkında kapsamlı bilgi sağlar ve adım adım öğretir.
Git Eğitimleri: Çevrimiçi ve yüz yüze eğitimler Git kullanımını öğrenmek için harika bir seçenektir. Birçok şirket ve eğitim kuruluşu Git eğitimleri sunar.
Git Uygulama: Git kullanarak çalışmak en iyi öğrenme yollarından biridir. Git, Github, Gitlab gibi platformlar üzerinde çalışarak Git'i kullanmayı öğrenebilirsiniz.
Git Kitapları: Git kullanımını öğrenmek için birçok kitap mevcut. Git'in resmi belgeleri dışında "Pro Git", "Git Pocket Guide" ve "Git for Teams" gibi kitaplar kullanışlı olabilir.
Git kullanımını öğrenmek için yukarıdaki kaynaklardan bir veya birkaçını kullanabilirsiniz. Öğrendiklerinizi uygulayarak pratik yapmak Git kullanımınını öğrenmenizi hızlandıracaktır.
Sık Kullanılan Git Terimleri
- Repository
Git repository, proje dosyalarının versiyon kontrolü için kullanılan bir depodur. Bu depo değişiklikleri kaydederek bir projenin tarihçesini tutar. Bu sayede geliştirme sürecinde yapılan her değişikliği geri almak veya karşılaştırmak mümkün hale gelir.
Git repository kullanmak için öncelikle bir proje dosyası oluşturmanız gerekir. Ardından bu dosyaları Git depolamanız gereken bir klasöre kopyalamanız gerekir. Git komutlarını kullanarak dosyalarınızı depoya ekleyebilir değişikliklerinizi kaydedebilir ve geri yükleyebilirsiniz.
Git repository kullanmanın birçok avantajı vardır. Örneğin değişiklikleri geri almak veya geri yüklemek kolaydır, bir projenin farklı versiyonlarına erişebilirsiniz ve birden fazla geliştiricinin aynı projede çalışmasını yönetebilirsiniz. Ayrıca dosyalarınızın güvenliği için Git repository yedekleme ve veri kurtarma özelliklerine sahiptir.
Git repository kullanarak projelerinizi daha organize hale getirebilirsiniz ve bir projenin farklı sürümlerini yönetmenizi kolaylaştırabilirsiniz. Ayrıca işbirliği yapmak için diğer geliştiricilerle projelerinizi paylaşabilirsiniz.
- Commit
Git'te bir projenin tüm dosyaları bir repository (depo) olarak adlandırılan bir merkezi depoda saklanır. Bu repository projenin tüm sürümlerini ve değişikliklerini içerir. Bu değişiklikler commit'ler olarak adlandırılır.
- Branch
Git'te bir branch (dal) bir projenin farklı sürümlerinin ayrıntılı bir şekilde takip edilmesini sağlar. Bu birden fazla kişinin aynı projede aynı anda çalışmasına izin verir. Merge (birleştirme) ise farklı branch'lerin birleştirilmesine izin verir.
- Git Push
Git Push lokal bilgisayarda yaptığımız değişiklikleri uzak sunucudaki bir Git deposuna yüklememizi sağlayan bir Git komutudur. Yani yerel bilgisayarımızda yaptığımız değişikliklerin (commit) sunucuya gönderilmesini sağlar.
Git Push komutunu kullanmak için öncelikle değişikliklerimizi (commit) yapmamız gerekiyor. Ardından uzak sunucudaki Git deposuna göndermek istediğimiz commit'i seçiyoruz. Son olarak "git push" komutunu kullanarak değişikliklerimizi sunucuya yüklüyoruz.
Örneğin "git push origin master" komutu "origin" adlı uzak sunucudaki "master" adlı depoya yapmış olduğumuz değişiklikleri yükler.
Git Push işlemi yaparken sunucuda bulunan dosyalarla yerel bilgisayarımızdaki dosyaların farklılık göstermesi durumunda "merge conflict" adı verilen bir durum oluşabilir. Bu durumda farklılıkları düzeltmek ve değişikliklerimizi sunucuya yüklemek için öncelikle "pull" işlemi yaparak sunucudaki son değişiklikleri yerel bilgisayarımıza çekmemiz gerekiyor. Daha sonra farklılıkları düzelterek "commit" ve "push" işlemlerini gerçekleştiriyoruz.
Git Push komutu projeleri kolayca paylaşmamızı ve işbirliği yapmamızı sağlayan güçlü bir araçtır. Ancak projelerimizi güncellerken dikkatli olmamız ve farklılıkları doğru şekilde çözmek için çaba harcamamız gerekiyor.
- Git Fetch
Git fetch uzak bir depodaki tüm değişiklikleri yerel depoya indirmenin bir yoludur. Bu işlem yerel depoda hiçbir değişiklik yapmadan yapılır. Git fetch yerel depoda bulunmayan tüm yeni dosyaları ve değişiklikleri indirir.
Git fetch komutu kullanımı oldukça basittir. Komutu kullanmak için şu adımları izleyebilirsiniz:
Terminal penceresini açın.
Git projesinin bulunduğu dizine gidin.
"git fetch" komutunu girin.
Komut çalıştırıldığında, Git, yerel depoya indirilecek olan tüm değişiklikleri kontrol edecektir.
Bu işlem sonrasında, yerel depoya henüz uygulanmamış değişiklikler hakkında bilgi alabilirsiniz. Git fetch, yerel depoya etki etmeden önce, yerel depoda yapabileceğiniz değişiklikleri, uzak depoya yüklediğiniz değişikliklerle karşılaştırmanıza olanak tanır.
Git fetch komutu, yerel depodaki herhangi bir dosyayı değiştirmez veya güncelleştirmez, sadece değişiklikleri indirir. Bu nedenle, yerel depoya indirdiğiniz değişiklikleri uygulamak için "git merge" veya "git rebase" komutlarını kullanmanız gerekir.
Git Head
HEAD, mevcut çalışma kopyasının işaretçisidir ve tipik olarak son commit'tir. Yeni bir commit yapmak HEAD'i hareket ettirir. HEAD'i, işaretçileri (branch) değiştirmek veya commit numaralarını kullanarak değiştirebilirsiniz.
Git Stash
Stash, mevcut değişiklikleri geçici olarak kaydetmek için kullanılan bir özelliktir. Bu, yarım kalmış bir işi kaydetmek veya bir dalı değiştirmek için başka bir işe geçmek istediğinizde yararlıdır. Stash'i kullanarak, mevcut değişiklikleri kaydedebilir ve daha sonra geri yükleyebilirsiniz.
Git Tag
Etiket, belirli bir commit'i işaret etmek için kullanılan bir işaretçidir. Etiketler, bir proje sürümünün veya bir dizi belirli değişikliğin işaretlenmesi gibi durumlarda kullanışlıdır.
Git Diff
Diff, dosyalar veya commit'ler arasındaki farkları gösteren bir komuttur. Bu komut, mevcut çalışma kopyası ile depodaki bir commit arasındaki farkları, iki farklı commit arasındaki farkları veya iki farklı dosya arasındaki farkları göstermek için kullanılabilir.
Git Rebase
Bu komut, bir dalın tarihini başka bir dalın tarihiyle değiştirir. Bu, bir dalı başka bir dala taban alarak yeniden yapılandırmak için kullanışlı bir yöntemdir. Rebase işlemi sırasında, herhangi bir çakışma olup olmadığını kontrol etmek önemlidir.
Git Conflict
İki farklı dalın aynı dosyalarını düzenlerken çakışma oluştuğunda ortaya çıkan bir durumdur. Bu durumda, Git çözülmemiş değişiklikler olduğunu belirtir. Çakışmayı çözmek için, düzenleme çakışmasının belirtildiği dosyaları manuel olarak düzenleyip yeniden eklemek gerekir.
Git Checkout
Bu komut, mevcut dalı, belirli bir dal veya önceki bir tarihteki bir dal gibi farklı bir dal üzerine değiştirir. Bu, işlemleri test etmek veya farklı bir geliştirme yolunu denemek için kullanışlı bir yöntemdir.
Git Pull Request
Bu komut, bir dalı bir başka dal ile birleştirmek isteyen geliştiriciler tarafından kullanılır. Pull Request, diğer geliştiricilerin değişiklikleri gözden geçirmesini ve onaylamasını sağlar.
Git Fork
Bir projeyi forklamak, orijinal projeyi kopyalamak anlamına gelir. Fork işlemi, orijinal projenin bağımsız bir kopyasının oluşturulmasını sağlar ve bu kopya üzerinde değişiklikler yapılabilir.
Fork işlemi, projeye katkıda bulunmak isteyenler için önemlidir. Bir projeye katkıda bulunmak için öncelikle projeyi forklamak, ardından kendi hesabınıza aldığınız bu kopya üzerinde değişiklikler yapmak ve son olarak da değişikliklerinizi orijinal projeye göndermek gerekir.
Collaborator
Collaborator, projenin sahibi tarafından proje üzerinde çalışmasına izin verilen diğer kullanıcılar veya ekip üyeleridir. Collaborator'ler, projenin yönetimi, geliştirilmesi veya bakımı için ihtiyaç duyulan yetkilere sahip olabilirler.
Collaborator olarak eklenmek, projede yer almanın yanı sıra, projeye katkıda bulunmanın da bir yolu olabilir.
Checkout
Checkout, mevcut branch'i değiştirmek için kullanılır. Bir branch'te çalışırken, projenin farklı bir bölümüne geçmek isteyebilirsiniz. Bu durumda, checkout komutu kullanarak mevcut branch'ten farklı bir branch'e geçebilirsiniz.
Commit Message
Commit Message: Commit Message, bir commit işlemi yaparken verilen açıklamadır. Bu, diğer kullanıcıların yapılan değişiklikleri anlamalarına yardımcı olur ve projenin ilerleyişini izlemeye yardımcı olur.
Git Pull Rebase
Git Pull Rebase, iki farklı Git branch'ini birleştirirken bir önceki branch'ın tarihçesini korumanıza olanak tanır. Bu, birleştirme işleminin daha temiz ve kolay yönetilebilir hale gelmesine yardımcı olur.
Cherry-Pick
Cherry-pick, farklı bir branch'tan bir veya daha fazla commit'i almanızı ve mevcut branch'inize uygulamanızı sağlar. Bu, bir branch'tan belirli değişiklikleri seçmek istediğinizde oldukça kullanışlıdır.
Origin
Origin, bir remote repository'nin varsayılan adıdır. Bu, bir repository'e push veya pull işlemi yaparken kullanılan adı belirtir.
Master
Master, bir Git repository'nin varsayılan branch'idir. Bu branch, projenin ana geliştirme hattını temsil eder ve diğer branch'lerden merge edilir.
Checkout
Checkout, mevcut branch'ten farklı bir branch'e geçmek için kullanılan bir Git komutudur. Bu, farklı bir branch'ta çalışmak istediğinizde veya bir branch'ta yaptığınız değişiklikleri geri almak istediğinizde kullanışlıdır.
Remote
Uzak sunucudaki değişiklikleri takip etmek için kullanılan bir referanstır. Yani, bir projenin uzaktaki bir depoda nasıl saklandığını belirtir. Git Remote, kodunuzun orijinal hali ile diğer kullanıcıların değişikliklerinin yer aldığı bir yerde tutulmasına olanak tanır.
Index
Git, her dosyanın bir sonraki adımda ne yapılması gerektiğini bilmesi için bir dosya dizini kullanır. Bu dizine Git Index (veya Staging Area) denir. Bu, değişiklikleri bir sonraki commit'e hazırlama adımıdır.
SHA
Git, her commit için benzersiz bir kimlik sağlamak için SHA-1 hash işlevini kullanır. Bu, Git'in kimlik doğrulama, veri bütünlüğü ve diğer işlemlerinde kullanılan bir anahtar değerdir.
Gitignore
Gitignore, Git'in takip etmemesi gereken dosyaların bir listesidir. Bu, örneğin derleme dosyaları, log dosyaları veya kullanıcının özel ayar dosyaları gibi kod projeleriyle ilgisi olmayan dosyaları hariç tutmak için kullanılabilir.
Git Submodule
Git alt modülleri, bir Git deposunun, diğer Git depolarını içeren bir alt dizine bağlanmasına izin verir. Bu, bağımlılıkları yönetmek ve üst düzey bir projeyle birlikte çalışan diğer projeleri dahil etmek için kullanışlıdır. Alt modülleri kullanırken, ana projeye ait bir dosya, kendisine ait bir depoya sahip olur ve bu depo kendi özelliklerine sahiptir.
Tag
Git tag, özellikle önemli bir özellik güncellemesi veya ana sürümün sürümü sırasında, belirli bir noktaya bir isim vererek o noktayı işaretlemek için kullanılır. Bu, projede farklı zamanlarda yapılan değişiklikleri takip etmek için kullanışlıdır.
Blame
Git blame, dosyaların belirli bir satırının hangi değiştirme veya sürümün yazarı olduğunu belirlemek için kullanılır. Bu, dosya üzerindeki bir değişikliğin tarihi hakkında bilgi sahibi olmak için kullanışlıdır.
Reflog
Git reflog, Git deposunda yapılan tüm değişiklikleri kaydeden bir kayıt defteridir. Bu, geçmişte yapılan bir değişikliği geri almanın veya depo hakkında daha fazla bilgi edinmenin bir yoludur.
Git Alias
Git komutlarını kısaltmak ve özelleştirmek için kullanılır. "Git ci" yerine "Git commit" gibi bir kısaltma tanımlanabilir.
Git Bisect
Hatalı bir değişikliğin hangi sürümde ortaya çıktığını bulmak için kullanılır. Git, geçmişteki herhangi bir sürüme geçerek sürümleri karşılaştırır.
Git Reset
Bir dosyanın veya değişikliğin geçmiş sürümlerine geri dönmek için kullanılır. Yapılan değişiklikler silinir ve dosya veya değişiklik geçmiş sürümleriyle aynı hale getirilir.
Git Ref
Git'in, farklı değişikliklerin hangi sürümde yapıldığını takip etmek için kullandığı bir referans sistemidir.
Git Submodule
Projelerde başka projelerin alt modüllerinin kullanılmasına olanak tanır. Böylece bir projenin bir parçası olan başka bir projeyi, bağımsız olarak yönetebilirsiniz.
Git Tag
Belirli bir sürüm için anlamlı bir isim ve referans etiketi verir. Böylece bu sürüme daha kolay ulaşabilirsiniz.
Git Blame
Her satırda kimin hangi değişikliği yaptığını gösteren bir rapor oluşturur. Bu, bir dosyada neden bir değişiklik yapıldığını ve kimin bu değişikliği yaptığını anlamak için yararlıdır.
Git Reflog
Git'in her bir hareketi kaydettiği bir günlük tutar. Bu, yanlışlıkla yapılan bir değişikliği geri almanız gerektiğinde veya bir değişikliği silmeniz gerektiğinde yararlıdır.
Git Subtree
Alt dizinlerde bulunan bir Git deposunu ana projeye bağlamak için kullanılır.
Cherry-pick Range
Belirli bir aralıktaki değişiklikleri seçerek ve birleştirerek işlem yapmak için kullanılır.
Amend
En son commit'inizi düzenleyebilmenizi sağlar.
Pull with Rebase
Birleştirme işlemini gerçekleştirirken, değişiklikleri geri alma ihtiyacı olmadan önce yerel deponuzdaki değişiklikleri başarılı bir şekilde yüklemek için kullanılır.
Squash
Birden fazla commiti tek bir commit olarak birleştirmek için kullanılır.
En Sık Kullanılan Git Komutları
git init: Bir projede git kullanmak istiyorsanız, öncelikle projenizin yerel bir git deposuna sahip olması gerekiyor. Bu nedenle, projenizin yerel klasöründe
git init
komutunu kullanarak git deposunu başlatmanız gerekiyor. Bu komut, proje dizininde .git adlı bir klasör oluşturur ve git deposunu başlatır.git clone: Bir projenin uzak bir git deposundan yerel bir kopyasını almak istiyorsanız,
git clone
komutunu kullanabilirsiniz. Bu komut, belirtilen uzak depodan projenin tamamını indirir ve yerel bir kopyasını oluşturur. Örneğin,git clone
https://github.com/kullaniciAdi/projeAdi.git
komutunu kullanarak bir projenin uzak kopyasını indirebilirsiniz.git add: Git deposunda, değiştirilmiş dosyaları izlemek ve sonraki adımda bu dosyaları bir sonraki commit işlemine dahil etmek için
git add
komutunu kullanmanız gerekir. Örneğin,git add dosya1.txt dosya2.txt
komutu ile dosyaları izleyebilirsiniz.git commit: Dosyaları bir sonraki commit için hazırladıktan sonra, değişiklikleri kaydetmek için bir
commit
işlemi yapmanız gerekir.git commit -m "commit mesajı"
komutunu kullanarak, bir commit mesajı ile birlikte değişiklikleri kaydedebilirsiniz. Commit mesajı, yaptığınız değişiklikleri açıklayan bir mesajdır.git push: Yaptığınız değişiklikleri, yerel depodan uzak bir git depolarına göndermek için
git push
komutunu kullanmanız gerekiyor.git push origin master
komutu, master dalınızın değişikliklerini "origin" adlı uzak bir depoya gönderir.git pull: Bu komut, uzak bir depodan değişiklikleri yerel depoya getirmek için kullanılır. Yani, başka biri ya da siz, uzaktaki depoda yaptığınız değişiklikleri yerel depoya almak istiyorsanız kullanılır. Kullanımı oldukça basittir: "git pull <uzak-depo>" şeklinde kullanılır. Örneğin, "git pull origin" komutu, "origin" adlı uzak depodan değişiklikleri alacaktır.
git branch: Bu komut, yerel depoda bulunan mevcut tüm dalları listelemek ve yeni dallar oluşturmak için kullanılır. Kullanımı oldukça basittir: "git branch" komutu, tüm dalları listeler. Yeni bir dal oluşturmak için "git branch <yeni-dal>" şeklinde kullanabilirsiniz.
git checkout: Bu komut, mevcut dalın değiştirilmesi ve yeni bir dalın seçilmesi için kullanılır. Yani, bu komut, farklı dallar arasında geçiş yapmak için kullanılır. Kullanımı oldukça basittir: "git checkout <dal-adı>" komutu, belirtilen dalı seçer. Örneğin, "git checkout yeni-dal" komutu, "yeni-dal" adlı dalı seçecektir.
git merge: Bu komut, farklı dalları birleştirmek için kullanılır. Yani, bu komut, belirli bir dalı diğer dal ile birleştirmek için kullanılır. Kullanımı oldukça basittir: "git merge <birleştirilecek-dal>" komutu, belirtilen dalı mevcut dal ile birleştirir. Örneğin, "git merge yeni-dal" komutu, "yeni-dal" adlı dalı mevcut dal ile birleştirir.
git status: Git status, çalışma kopyanızdaki dosyaların Git deposundaki durumunu gösterir. Bu komutu kullanarak, hangi dosyaların değiştirildiğini veya hangi dosyaların henüz depolanmadığını görebilirsiniz. Bu, Git ile çalışırken hangi dosyaların değiştiğini izlemenize ve iş akışınızı yönetmenize yardımcı olur.
git pull: Git pull, mevcut çalışma kopyanızı (working copy) ve uzak bir depodaki (remote repository) kopyayı senkronize etmek için kullanılır. Yani, uzak bir depodan en son güncellemeleri almak istediğinizde kullanırsınız. Komutu kullanmak için, öncelikle çalışma kopyanızın doğru depoya bağlı olduğundan emin olmanız gerekir. Sonra,
git pull
komutunu çalıştırın ve git, en son değişiklikleri indirip yerel çalışma kopyanıza ekleyecektir.git branch: Git branch mevcut Git deposundaki tüm dalları listeler. Bu komutu kullanarak, mevcut dalınızı (branch) kontrol edebilirsiniz ve mevcut dalınıza veya başka bir dala geçebilirsiniz. Ayrıca, bir dal oluşturabilir veya bir dalı silmek gibi birçok dal işlemini de gerçekleştirebilirsiniz.
git checkout: Git checkout bir dalı değiştirmek veya mevcut çalışma kopyanızı bir önceki durumuna geri yüklemek gibi farklı amaçlarla kullanılabilir. Örneğin, bir dalda çalışıyorsanız ve başka bir dalda çalışmaya başlamak isterseniz,
git checkout
komutunu kullanarak dalı değiştirebilirsiniz.git merge: Git merge iki farklı dalı birleştirmek için kullanılır. Örneğin, ana dalınızda (master branch) çalışırken bir özellik dalı (feature branch) oluşturmuş olabilirsiniz. Sonra, özellik dalınızda çalışırken, bir diğer kişinin ana dalda yaptığı bir değişikliği fark edebilirsiniz. Bu değişikliği ana dalınıza eklemek isterseniz,
git merge
komutunu kullanarak özellik dalınızı ana dalınıza birleştirebilirsiniz.git fetch : Git fetch uzaktaki bir Git deposundaki (remote repository) son güncellemeleri yerel bir kopyaya indirmek için kullanılır. Ancak,
git pull
komutundan farklı olarak,git fetch
sadece indirir ve yerel çalışma kopyanızı güncellemez. Yani,git fetch
komutunu kullandıktan sonra, güncellemeleri yerel çalışma kopyanıza entegre etmek içingit merge
veyagit rebase
gibi başka komutları kullanmanız gerekir.git tag: Git tag Git deposundaki belirli bir noktayı veya belirli bir sürümü işaretlemek için kullanılır. Yani, belirli bir noktada bir etiket (tag) oluşturabilirsiniz ve bu etiket sayesinde, daha sonra bu noktaya geri dönmek için kullanabilirsiniz. Örneğin, bir proje için bir sürüm etiketi oluşturabilirsiniz ve bu etiketi daha sonra, bu sürüme geri dönmek istediğinizde kullanabilirsiniz.
git show: Git show belirli bir Git nesnesinin (object) içeriğini göstermek için kullanılır. Bu, belirli bir dosyanın değiştirilmiş veya silinmiş versiyonlarını veya bir commit'in detaylarını görmek için kullanılabilir. Örneğin,
git show <commit-hash>
komutunu kullanarak, belirli bir commit'in değişikliklerini görebilirsiniz.git config: Git config, git yapılandırma ayarlarını değiştirmek veya görüntülemek için kullanılır. Bu komutu kullanarak, adınızı, e-posta adresinizi veya diğer Git yapılandırma ayarlarınızı ayarlayabilirsiniz. Ayrıca, bu komutu kullanarak, Git davranışını değiştiren diğer ayarları da yapılandırabilirsiniz.
git blame: Git blame bir dosyadaki değişikliklerin hangi kullanıcılar tarafından yapıldığını ve hangi commit'lerde yapıldığını gösterir. Bu, bir dosyadaki belirli bir satırdaki değişikliklerin sorumlusu olarak kimin olduğunu bulmanıza yardımcı olabilir. Bu, özellikle ekip çalışması yapılan büyük projelerde, kodun kim tarafından değiştirildiğini bulmak için kullanışlı bir komuttur.
git revert: Git revert, belirli bir commit'in değişikliklerini geri almak için kullanılır. Yani, bir hata yaptıysanız veya bir değişikliğin yanlış olduğunu fark ettiyseniz,
git revert
komutunu kullanarak, değişikliği geri alabilirsiniz. Bu, geri alınan değişikliği, yeni bir commit olarak kaydeder.git cherry -pick: Git cherry -pick, başka bir dalda yapılan belirli bir commit'in değişikliklerini, mevcut dalınıza eklemek için kullanılır. Yani, başka bir dalda yapılan bir değişikliği, kendi dalınıza eklemek isterseniz,
git cherry-pick
komutunu kullanabilirsiniz. Bu, belirli bir commit'in değişikliklerini, yeni bir commit olarak mevcut dalınıza uygular.git rebase: Git rebase bir dalın tarihçesini, başka bir dalın tarihçesiyle yeniden düzenlemek için kullanılır. Yani, bir dalı başka bir dalın üzerine yeniden uygulayarak, değişiklikleri daha düzenli hale getirebilirsiniz. Bu, birleştirme (merge) işleminden farklıdır çünkü yeni bir commit geçmişi oluşturur.
git RM: Git deposundan bir dosyayı silmek için kullanılır. Bu komutu kullanarak, bir dosyayı silebilir ve bu değişikliği yeni bir commit olarak kaydedebilirsiniz.
git mv: Git mv, Git deposunda bir dosyanın adını veya konumunu değiştirmek için kullanılır. Bu, bir dosyanın adını veya konumunu değiştirdiğinizde, yeni bir commit geçmişi oluşturarak değişikliği kaydeder. Bu, bir dosyanın adını veya konumunu değiştirmek için kullanışlı bir komuttur, çünkü bu değişiklikleri manuel olarak yapmak yerine, Git bu değişiklikleri takip edebilir ve kaydedebilir.
git grep: Git grep, Git deposu içindeki dosyalarda belirli bir metin dizesi aramak için kullanılır. Bu, dosyaların içeriğinde hızlı bir arama yapmanızı sağlar ve belirli bir dosyayı açmak veya tüm dosyaları gezinmek zorunda kalmadan, istediğiniz metin dizesini hızlıca bulmanıza olanak tanır.
git archive: Git archive, Git deposundaki bir dal veya belirli bir commit'in bir sıkıştırılmış arşivini oluşturmak için kullanılır. Bu, belirli bir dalı veya commit'i paylaşmak veya yedeklemek için kullanışlıdır.
git submodule: Git submodule, başka bir Git deposunu mevcut projenize eklemek için kullanılır. Bu, bir projenin farklı bölümlerinin farklı Git depolarında barındırıldığı durumlarda, farklı depolar arasında bağlantı kurmanıza olanak tanır.
git bisect: Git bisect, bir hata ya da sorunun hangi commit'te ortaya çıktığını belirlemek için kullanılır. Bu, bir hata bildirimi aldığınızda veya bir değişiklikle ilgili bir sorun yaşadığınızda, hangi commit'in bu hatayı veya sorunu tetiklediğini belirlemek için kullanılır.
git bisect
komutu, otomatik olarak, tüm geçmişteki commit'leri test etmek için bir yolculukta sizi yönlendirir ve bu sayede hata veya sorunun hangi commit'te ortaya çıktığını belirlemenizi sağlar.git reflog: Git deposundaki tüm HEAD referans değişikliklerini listeler. Bu, bir HEAD referansının nasıl değiştirildiğini izlemenizi sağlar. Bu, özellikle yanlışlıkla yapılan değişiklikleri geri almanız gerektiğinde faydalıdır.
git reflog
komutu, HEAD referansının geçmişteki tüm değişikliklerini gösterir ve bu sayede, hatalı bir değişikliği geri almanızı kolaylaştırır.git clean: Git clean deponun temizlenmesi için kullanılır. Bu, çalışma dizinindeki belirli dosya veya dizinleri kaldırmak için kullanılır. Bu komutla, gereksiz veya geçici dosyaları temizleyebilir ve deponuzu düzenleyebilirsiniz.
git fsck: Git fsck, deponuzdaki tüm nesnelerin durumunu kontrol eder ve bozuk nesneleri bulur. Bu, bozuk nesneleri onarmak ve veri bütünlüğünü sağlamak için kullanışlıdır.
git branch -d: Git branch -d belirli bir dalı silmek için kullanılır. Bu, artık kullanılmayan veya gereksiz olan bir dalı silmek için kullanışlıdır.
git branch -r: Git branch -r, uzak depodaki dalların listesini görüntülemek için kullanılır. Bu, diğer kullanıcıların deponuzla paylaştığı dalları görmek için kullanışlıdır.
git push --tags: Git push --tags, tüm etiketleri uzak depoya göndermek için kullanılır. Bu, belirli bir etiketin yerel deponuzdaki değişikliklerini uzak depoya yansıtmak için kullanışlıdır. Bu komut, tüm etiketleri uzak depoya yansıtır ve deponuzdaki etiketleri aynen kopyalar. Bu sayede, tüm etiketlerin güncel olmasını sağlayabilirsiniz.
git log --graph: Git log --graph, git deponuzdaki geçmişin grafiğini gösterir. Bu, dallanmaları ve birleşmeleri görsel olarak görmenize ve daha iyi anlamanıza yardımcı olur.
git log --oneline: Git log --oneline, her bir değişikliği tek bir satırda özetler. Bu, daha az ayrıntı isteyenler için kullanışlıdır ve özellikle büyük bir proje üzerinde çalışırken, değişiklik geçmişini daha hızlı bir şekilde gözden geçirmenize olanak tanır.
git log --pretty: Git log --pretty değişiklik geçmişini farklı bir biçimde göstermenizi sağlar. Bu, farklı bilgileri göstermek, özelleştirilmiş bir görünüm oluşturmak veya değişiklik geçmişini belirli bir formatta çıktı almak için kullanılır.
git log --author: Git log --author, yalnızca belirli bir yazarın değişikliklerini göstermek için kullanılır. Bu, belirli bir kişinin yaptığı değişiklikleri incelemeniz gerektiğinde kullanışlıdır.
git log --since: Git log --since, belirli bir tarihten sonraki değişiklikleri göstermek için kullanılır. Bu, belirli bir tarihten sonraki değişiklikleri incelemek veya belirli bir tarihten önceki değişiklikleri hariç tutmak için kullanışlıdır. Örneğin,
git log --since="2022-01-01"
komutu, 1 Ocak 2022'den sonraki değişiklikleri gösterecektir.git blame -L: Git blame -L, belirli bir satır veya satır aralığı için bir dosyanın değişiklik geçmişindeki değişiklikleri gösterir. Bu, hangi satırların kim tarafından değiştirildiğini ve ne zaman değiştirildiğini anlamak için kullanılır.
git checkout -b: Git checkout -b, yeni bir dal oluşturmanızı ve o dalda çalışmanızı sağlar. Bu, mevcut bir dalı değiştirmeden yeni bir özellik veya değişiklik eklemeniz gerektiğinde kullanışlıdır.
git clone --depth: Git clone --depth, belirli bir tarihe kadar olan değişiklik geçmişini yalnızca indirerek bir deponun kısmi bir kopyasını oluşturmanızı sağlar. Bu, büyük bir projeyi indirmek için gereken zamanı ve bant genişliğini azaltmak için kullanılır.
git commit --amend: Bu komut son bir değişikliği mevcut bir değişiklikle birleştirir veya son bir değişikliği düzenler. Bu, son bir değişikliği yanlışlıkla yapılan küçük bir hata nedeniyle düzeltmeniz gerektiğinde veya son bir değişikliği sonraki bir değişikliğe birleştirmeniz gerektiğinde kullanılır.
git decribe: Git describe, bir belirtecin (tag) veya belirli bir dala göre en son değişiklikten sonraki en yakın belirteci (tag) gösterir. Bu, belirli bir tarihteki veya belirli bir değişiklikteki sürüm bilgilerine göre değişiklik geçmişini anlamanıza yardımcı olur.
git fetc --prune: Git fetch --prune, uzak bir depodan değişiklikleri getirirken aynı zamanda yerel depoda artık mevcut olmayan dalları siler. Bu, uzak bir depodan silinmiş dalların yerel bir depoda da silinmesi gerektiğinde kullanılır.
git merge --no-ff: Git merge --no-ff, bir dalı diğerine birleştirirken hiyerarşiyi koruyarak bir kayıt oluşturur. Bu, bir özellik dalının veya konu dalının ana dalıyla birleştirilmesi gerektiğinde kullanışlıdır.
git pull --rebase: Bir değişiklik yapmadan önce önce yerel deponuzu günceller ve ardından uzak depodaki değişiklikleri alır. Bu, önceki değişikliklerinizi yeni değişikliklerle uyumlu hale getirmeniz gerektiğinde kullanılır.
git rebase -i: Git rebase -i, bir dalın geçmişindeki değişikliklerin sırasını değiştirmenize veya birleştirmenize olanak tanır. Bu, bir dalın geçmişini yeniden düzenlemeniz gerektiğinde veya birçok küçük değişikliği birleştirmeniz gerektiğinde kullanılır.
git tag -a: Git tag -a, bir belirteci (tag) imzalayarak belirli bir sürümü işaretlemenizi sağlar. Bu, bir projenin farklı sürümlerine atıfta bulunmanız gerektiğinde veya bir sürüm için belirli bir zaman damgası koymak istediğinizde kullanılır.
git cherry: Bu komut, mevcut dalınızın başka bir dalıyla karşılaştırarak, henüz kaydedilmemiş olan değişikliklerinizi gösterir. Bu komut, karşılaştırılan dallar arasında farkların nerede olduğunu bulmak için kullanılabilir. Özellikle, mevcut dalınızdaki değişikliklerin bir kısmının başka bir dalda hala uygulanmamış olduğunu görmek istediğinizde faydalıdır.
git revert --no-commit: Bu komut, bir önceki
git revert
komutunun bir varyasyonudur. Bu komut, bir değişikliği geri alırken, değişikliği kendisi yerine değiştirmez, ancak bunun yerine size değişikliğinizi istediğiniz gibi düzenleme fırsatı verir. Bu komut, herhangi bir yanlışlık veya hata olasılığına karşı ekstra bir güvenlik sağlar.git merge --squash: Bu komut, iki dalı birleştirirken, normal birleştirmeden farklı olarak, kaynak dalındaki tüm değişiklikleri tek bir büyük değişiklik olarak hedef dala uygular. Bu, birleştirilen değişikliklerin daha temiz ve daha düzenli bir şekilde kaydedilmesini sağlar.
git tag -d: Bu komut, yerel bir etiketi (tag) silmek için kullanılır. Örneğin, yanlışlıkla oluşturulan bir etiketi silmek veya artık kullanılmayan bir etiketi kaldırmak için kullanılabilir.
git push --force: Bu komut, uzak bir dalı güncellemek için kullanılır. Ancak, bu komut, normal
git push
komutundan farklı olarak, değişikliklerinizi tüm uzak dala zorla yükleyeceği için dikkatli kullanılmalıdır. Bu, herhangi bir potansiyel çakışma veya kayıp veri riskini beraberinde getirir. Bu komutu kullanırken, etkilerini iyi anlamak ve dikkatli olmak önemlidir.git blame --date: Bu komut, belirli bir dosyadaki her satırın kim tarafından yapıldığını ve değiştirildiğini, hangi tarihte değiştirildiğini gösteren bir çıktı verir. Bu, bir dosyadaki her satırın geçmişini takip etmek için kullanışlı bir araçtır. Özellikle, bir değişiklik yapıldığında veya bir hata tespit edildiğinde kimin hangi satırlarda değişiklik yaptığını bulmak için yararlıdır.
git bisect run: Bu komut, bir kod değişikliği sorununa neden olan belirli bir commit'in hangisi olduğunu bulmak için bir binary search işlemi yapar.
git bisect
komutu, kullanıcının belirli bir commit'in soruna neden olup olmadığını manuel olarak kontrol etmesine izin verir. Ancak,git bisect run
komutu, otomatik olarak test etmek için bir betik çalıştırır ve sorunun hangi commit'te ortaya çıktığını bulur.git log --grep: Bu komut, git tarihçesi içinde belirli bir anahtar kelime veya ifade aramak için kullanılır.
--grep
argümanı, tarihçedeki commit mesajlarını belirtilen anahtar kelime veya ifade ile eşleştirmek için kullanılır. Bu komut, tarihçede belirli bir değişiklik veya sorun hakkında daha fazla bilgi edinmek için kullanışlıdır.git stash pop: Bu komut, depolanmış değişikliklerinizi geri yüklemek için kullanılır.
git stash
komutu, yarım kalmış değişikliklerinizi kaydetmenize olanak tanır. Bu, hala tamamlanmayan veya test edilmeyen bir kod parçası üzerinde çalışırken, başka bir görevle ilgilenmeniz gerektiğinde kullanışlıdır.git stash pop
, en son depolanan değişiklikleri geri yükler.git remote add: Bu komut, uzak bir depo ile çalışmak için yerel bir depoya yeni bir uzak depo eklemenize olanak tanır. Uzak bir depo, bir git deposu olarak depolanmayan, genellikle başka bir bilgisayarda veya sunucuda bulunan kodu barındıran bir depodur.
git remote add
komutu, yerel depoya yeni bir uzak depo ekler. Bu, farklı bir sunucuda barındırılan depoyla senkronize etmek istediğinizde veya bir iş arkadaşınızın kodunu incelerken kullanışlıdır.git difftool: Git difftool komutu, git repository'deki dosyalar arasındaki farkları görmek için kullanılan bir araçtır. Bu komut, görsel bir arayüz kullanarak dosyaları karşılaştırmanıza olanak tanır. Git difftool, farklı dosya biçimlerini destekleyen çeşitli araçları kullanarak dosyaları karşılaştırmanıza olanak tanır.
Git difftool kullanmak için, öncelikle
git difftool
komutunu çalıştırmalısınız. Bu, değiştirilmiş dosyaları ve hangi aracın kullanılacağına dair bir liste görüntüler. Ardından, karşılaştırmak istediğiniz dosyayı seçebilirsiniz. Seçtiğiniz dosya, belirtilen araçta açılacaktır.Örneğin, iki commit arasındaki farkları Meld aracı ile görmek isterseniz, aşağıdaki komutu kullanabilirsiniz:
git difftool HEAD~1 HEAD --tool=meld
Bu komut, HEAD~1 ve HEAD commit'leri arasındaki farkları Meld aracında açacaktır. --tool=meld
parametresi, Meld aracını kullanacağımızı belirtir.
Git difftool ile kullanabileceğiniz diğer bazı araçlar şunlardır:
vimdiff
meld
kdiff3
tkdiff
xxdiff
araxis
opendiff
Hangi araçları kullanabileceğinizi belirlemek için, sistemde yüklü olan araçların listesini almak için git difftool --tool-help
komutunu kullanabilirsiniz.
Umarım faydalı olmuştur tüm bunları tek bir günde öğrenemezsiniz. Pratik yaparak istikrarlı bir şekilde ilerlemeniz gerkeiyor. Başarısızlıktan korkmayın hatalar sizi vazgeçirmesin. Çalışmalarınızda başarılar diliyorum! ⚡👋