Git Komutları - 1

Berkan Serbes
7 min readAug 1, 2023

--

Git, modern yazılım geliştirme süreçlerinde önemli bir yer tutan dağıtık versiyon kontrol sistemi olarak karşımıza çıkar. Geliştiricilerin çalışmalarını izlemek, değişiklikleri takip etmek, farklı sürümler arasında geçiş yapmak ve işbirliği yapmak için güçlü bir araçtır. Git komutlarıyla aynı işlevi gören görsel arayüzler genellikle kullanıcı dostu olabilir, ancak her programın farklı olduğu ve bazı karmaşık işlemleri gerçekleştirmede yetersiz kalabileceği unutulmamalıdır. İşte bu noktada, Git komutları devreye girer. Git komutları, geliştiricilere esneklik ve kontrol sağlar, farklı projeler ve platformlar arasında sorunsuz bir şekilde çalışır. Makalemizde, Git komutlarını adım adım açıklayarak, projeleri yönetmek, değişiklikleri takip etmek ve işbirliği yapmak için bu güçlü aracın nasıl kullanılacağını anlatacağız. Bu sayede, yazılım geliştirme süreçlerindeki verimliliğinizi artırabilir ve projelerinizi daha etkili bir şekilde yönetebilirsiniz.

git init

git init : yeni bir Git reposu oluşturur. Mevcut bir versiyon kontrolü olmayan bir projenin Git tarafından yönetilen bir repoya dönüştürmek veya tamamen yeni bir boş repo başlatmak için kullanılır. Bu komut genellikle yeni bir projeye başlamadan önce ilk adım olarak kullanılır.

git config

Bu komut, Git yapılandırma ayarlarını görüntülemek ve düzenlemek için kullanılır.

git config --global user.name <username> : Bu komutu kullanarak, global Git yapılandırmanızda kullanıcı adınızı belirtebilirsiniz. Bu, sizin kimliğinizi tanımlamak için kullanılır ve özellikle Git deposuna katkıda bulunurken bu bilgi önemlidir. <username> kısmını kendi GitHub kullanıcı adınız veya isminizle değiştirebilirsiniz.

Bu komutu çalıştırdığınızda, kullanıcı adınızı global olarak belirlediğiniz için bu bilgi tüm Git projelerinizde geçerli olacaktır. Eğer belirli bir projede farklı bir kullanıcı adı kullanmak isterseniz, o projenin dizininde git config --local user.name <username> komutunu çalıştırarak yerel ayarlar yapabilirsiniz. Yerel ayarlar, global ayarları geçersiz kılar ve yalnızca belirli projeye özgü olur.

git config --global user.email <email> : Git’in global yapılandırmasında yer alan user.email ayarını belirlemek için kullanılır.

git config --global core.editor <editorName> : Git’in global yapılandırmasında yer alan varsayılan editör ayarını değiştirmek için kullanılır. Bu komut, bir metin düzenleyici seçmenize olanak tanır ve bu düzenleyici, Git tarafından otomatik olarak açılacak olan düzenleme işlemleri için kullanılır. Örneğin, git commit komutunu çalıştırdığınızda, belirtilen düzenleyiciyi kullanarak commit mesajınızı girebilirsiniz.

<editorName> parametresine nano, vim, emacs ve VSCode için code --waitseçeneklerini yazabilirsiniz

git config --list : Git’in yapılandırma ayarlarını ve global, yerel(local) ve sistem(system) düzeylerindeki tüm yapılandırma değerlerini listeleyen bir Git komutudur. --global, --local, veya --system parametrelerini de ekleyerek global, yerel veya sistem düzeyindeki yapılandırmaları da ayrı ayrı görebilirsiniz.

git add

Bu komut working directory’deki dosyaları staging alanına ekleyerek, bir sonraki commit için hazırlar.

git add <filename>: Working directory’deki değişiklik yapılmış dosyaları staging area’ya ekler. Dosyaların staging area’ya eklenmesi bir sonraki commit işleminde yer alacağı anlamına gelir. Eğer tüm değişiklikleri staging area’ya eklemek istiyorsanız git add .komutunu kullanabilirsiniz.

git add -p : Bu komutu iyi bir şekilde anlamak için bir örnek üzerinde nasıl kullanıldığına bakalım.

Diyelim ki projenizde bir dosya var ve bu dosyanın içeriğini değiştirdiniz. Ancak değişiklikleri commit etmeden önce, hangi değişiklikleri eklemek istediğinizi seçmek istiyorsunuz. İşte git add -p komutu bu durumda size yardımcı olur.

1.Dosyayı düzenlediniz ve değişiklikleri gözden geçirmek istiyorsunuz:

dosya.txt dosyasının içerigi:Satır 1: Bu dosya yeni bir örnek dosyasıdır.
Satır 2: Burası örnek bir metin içerir.
Satır 3: Lütfen bu metni düzenleyin.

2. git add -p komutunu çalıştırın.

3. Karşınıza gelecek olan interaktif ekran size şu seçenekleri sunacaktır:

Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]?

Karşınıza çıkan bu parametreler staging area’ya ekleme esnasında yapabileceğiniz işlemleri belirtir. Parametrelerin anlamları aşağıdaki gibidir:

  • y: "Yes" anlamına gelir. Bu seçenek, seçtiğiniz değişiklikleri sahneleyeceğiniz (ekleyeceğiniz) anlamına gelir.
  • n: "No" anlamına gelir. Bu seçenek, seçtiğiniz değişiklikleri sahnelemeyeceğiniz (eklemeyeceğiniz) anlamına gelir.
  • q: "Quit" anlamına gelir. Bu seçenek, sahneleme işlemini tamamlayıp interaktif sahneleme ekranını kapatmak istediğinizi belirtir.
  • a: "All" anlamına gelir. Bu seçenek, tüm değişiklikleri otomatik olarak sahnelemenizi sağlar.
  • d: "Diff" anlamına gelir. Bu seçenek, değişikliklerin diff (fark) içeriğini görüntüler.
  • j: "Split into smaller hunks" anlamına gelir. Bu seçenek, seçtiğiniz değişiklikleri daha küçük parçalara bölmeyi sağlar.
  • J: "Join into one hunk" anlamına gelir. Bu seçenek, bölünmüş değişiklikleri tekrar birleştirir.
  • g: "Show a gap above each hunk for editing" anlamına gelir. Bu seçenek, her değişiklik parçasının üzerinde düzenleme için bir boşluk gösterir.
  • s: "Split" anlamına gelir. Bu seçenek, seçtiğiniz değişiklik parçasını daha küçük parçalara bölmeyi sağlar.
  • e: "Edit" anlamına gelir. Bu seçenek, değişiklikleri düzenleme moduna geçmenizi sağlar. Yani, değişiklikleri sahnelemek veya sahnelemeden çıkarmak için değişiklikleri düzenleme şansı verir.
  • ?: "Help" anlamına gelir. Bu seçenek, interaktif sahneleme ekranındayken kullanabileceğiniz seçenekleri ve kısayol tuşlarını gösteren bir yardım ekranını açar.

Bu parametreleri kullanarak, git add -p komutu sırasında değişiklikleri nasıl sahneleyeceğinize, böleceğinize veya birleştireceğinize karar verebilir ve sahneleme işlemini daha esnek bir şekilde yönetebilirsiniz.

git commit

git commit komutu, staging alanında bulunan dosyaların değişikliklerini bir commit olarak kaydeder ve Git deposuna kalıcı bir şekilde ekler.

git commit -m <commit message>: Staging area’ya eklenen dosyaları local git reposuna kalıcı olarak kaydetmek için kullanılan bir Git komutudur. <commit message> kısmını, yaptığınız değişiklikleri açıklayıcı bir kısa mesajla değiştirerek kullanabilirsiniz. Bu commit mesajları, projenin geçmişini ve yapılan değişikliklerin amacını anlamak için önemlidir.

git commit --amend -m <commit_message> : Bu komut, en son commit'i değiştirip yeni bir commit mesajı ile güncellemek için kullanılan bir Git komutudur. Bu komutu çalıştırdığınızda, en son commit’inizi değiştirir ve yeni bir commit mesajı ile günceller. --amend parametresi, mevcut commit'in üzerine yeni değişiklikleri ekler ve commit geçmişini değiştirirken, -m <commit_mesajı> parametresi ise yeni bir commit mesajı girmenizi sağlar.

git commit --amend --no-edit : Bu komut, en son commit’inizi değiştirmezken, sadece son yapılan değişiklikleri mevcut commit’inize ekler. Böylece, son yapılan değişiklikleri birleştirip yeni bir commit yapmadan mevcut commit’inizi güncelleyebilirsiniz --amend parametresi, mevcut commit'in üzerine yeni değişiklikleri eklerken --no-edit parametresi ise yeni bir commit mesajı girmenize gerek kalmadan mevcut commit mesajını korur.

git status

git status: Bu komutu çalıştırdığınızda, Git deposundaki değişiklikleri gösterir. Hangi dosyaların değiştirildiğini, hangilerinin stage aşamasında olduğunu ve hangilerinin izlenmediğini size bildirir. Bu bilgiler, dosyaların durumuna göre “untracked” (izlenmeyen), “modified” (değiştirilmiş), “staged” (staging’e alınmış) veya “committed” (kaydedilmiş) olup olmadığını anlamanıza yardımcı olur.

git status -s : Git reposundaki working directory’deki dosyaların durumunu kısa bir özetle gösteren bir Git komutudur.

Bu komutu çalıştırdığınızda, “short” (kısa) modda, dosyaların durumu kısaca iki sütun halinde listelenir. Soldaki sütun, dosya durumunu (staging alanında mı, izlenenler(tracked) listesinde mi? vb.) belirtirken, sağdaki sütun, dosya adını gösterir.

İşte bazı örnek durumlar ve komutun çıktısı:

  • A dosya.txt: Yeni bir dosya eklenmiş ve staging alanına eklenmiş.
  • M dosya.txt: Mevcut bir dosyada değişiklik yapılmış ve staging alanına eklenmiş.
  • ?? dosya.txt: Yeni bir dosya eklenmiş ancak henüz staging alanına eklenmemiş.
  • D dosya.txt: Bir dosya silinmiş ve staging alanına eklenmiş.

git diff

git diff HEAD <file name> : Bu komutu çalıştırdığınızda, belirtilen dosya ile en son commit (HEAD) arasındaki değişiklikleri karşılaştırır ve bunları görsel olarak size sunar.

git diff <commit1_hash> <commit2_hash> : Bu komut, iki farklı commit arasındaki farkları gösteren bir Git komutudur. Bu komutu çalıştırdığınızda, belirttiğiniz <commit1_hash> ve <commit2_hash> iki farklı commit arasındaki değişiklikleri karşılaştırır ve bunları görsel olarak size sunar.

git diff <branch1_name> <branch2_name> : Bu komut, iki farklı branch arasındaki farkları gösteren bir Git komutudur. Bu komutu çalıştırdığınızda, belirttiğiniz <branch1_adı> ve <branch2_adı> ile belirtilen iki farklı branch arasındaki değişiklikleri karşılaştırır ve bunları görsel olarak size sunar.

git diff --staged : Bu komut, staging area’ya eklenen dosyaların değişikliklerini görsel olarak size sunar.

git log

git log: Bu komutu çalıştırdığınızda, en son commit’ten başlayarak, tüm geçmiş commit’leri kronolojik sırayla listeleyen bir çıktı alırsınız. Her commit, benzersiz bir kimlik numarası (hash), yazar bilgisi, commit’in yapıldığı tarih ve commit mesajı gibi bilgilerle birlikte görüntülenir.

git log -p <hashId> : İlgili hash numarasına sahip commit’in commit yapılmadan önceki haliyle commit yapıldıktan sonraki haliyle arasındaki değişiklikleri görüntüler. Bu sayede, ilgili commit'in kod üzerinde hangi düzenlemelerin yapıldığını inceleyebilirsiniz.

git log --pretty=oneline: Git reposundaki commit geçmişini, her commit’in benzersiz kimlik numarasını (hash) ve commit mesajını tek satırda görüntülenmesini sağlar.

git log --all --oneline --graph : Bu komutu çalıştırdığınızda, tüm branch’lerdeki commit geçmişini tek satırlık özetler halinde gösterir ve commit’lerin birleşimini basit bir ASCII grafikle görselleştirir. Bu, projenin dallanma ve birleştirme geçmişini daha anlaşılır bir şekilde görmek için kullanılır. --all parametresi, tüm branch'lerdeki commit'leri gösterir. --oneline parametresi, commit'leri tek satırlık özetlerle listeler ve --graph parametresi, commit geçmişini basit bir ASCII grafikle görselleştirir.

git log --author="username" : Bu komutu çalıştırdığınızda, belirtilen kullanıcının yaptığı commit'leri tarih sırasına göre listeleyecektir. Bu şekilde, sadece belirli bir kullanıcı tarafından yapılan commit'leri filtrelemiş olursunuz.

git push

Bu komut, yerel Git depo üzerindeki değişiklikleri uzak bir Git sunucusuna (remote repository) göndermek için kullanılır. git push komutunu kullanmadan önce, öncelikle git add ve git commit komutlarıyla yereldeki değişiklikleri commit etmeniz gerektiğini unutmayın. Ayrıca, push işlemini gerçekleştireceğiniz uzak sunucunun ve branch'in doğru olduğundan emin olmalısınız.

git push -u origin <branch-name> : The -u flag is set to set up a tracking relationship between the local and remote master branches.

Belirtilen localbranch'i, origin adlı uzak sunucuya (remote repository) göndermek için kullanılan ve aynı zamanda local branch'i uzak sunucudaki branch ile ilişkilendiren bir Git komutudur.

Bu komutu çalıştırdığınızda, belirttiğiniz <branch-name> ile adlandırılan localbranch'i, origin olarak tanımlanan remote(uzak) sunucuya gönderir ve aynı zamanda -u (upstream) parametresi sayesinde local branch ile remote sunucudaki aynı ada sahip branch arasında ilişki kurar.

Bu ilişkiyi kurmanın ana avantajı, ilgili local branch’e sonraki işlemlerde kolaylık sağlamasıdır. Örneğin, git pull veya git push komutlarını ilgili branch için kullanırken, -u parametresi sayesinde remote sunucu ve branch adını belirtmek zorunda kalmazsınız. Bu şekilde, bir sonraki git pull veya git push işleminde sadece git pull veya git push komutlarını kullanarak işlem yapabilirsiniz.

Örnek kullanım: git push -u origin main

Bu komut, “main” adlı yerel branch’i, “origin” adlı uzak sunucuya gönderir ve aynı adlı uzak branch ile ilişkilendirir. Bu sayede, sonraki git pull veya git push işlemlerinde sadece git pull veya git push komutları ile işlem yapabilirsiniz.

git push <remote> <tagname> : Bu komut, proje içerisinde oluşturduğunuz belirli bir etiketi (tag) uzak repoya göndermek için kullanılan bir komuttur.

git push <remote> --tags : Bu komutu çalıştırdığınızda, localde oluşturduğunuz tüm etiketleri belirttiğiniz <remote> adlı uzak sunucuya gönderir. Etiketler, projenin önemli noktalarını veya sürüm bilgilerini işaretlemek için kullanılır ve paylaşılmak istenildiğinde uzak sunucuya gönderilir.

git clone

git clone <url> : Bu komutu çalıştırdığınızda, belirttiğiniz <url> adresindeki uzak sunucuda bulunan Git reposunu, yerel bir kopya olarak bilgisayarınıza indirir. Böylece, uzak repodaki tüm commit geçmişi, dosyalar ve branch'ler, yerelde aynı şekilde klonlanmış repoda da yer alır.

VIA: SSH
$ git clone ssh://user@domain.com/repo.git

VIA: HTTP
$ git clone http://domain.com/user/repo.git

Bu makalede temel git komutlarına değindik, sonraki serilerde ileri düzey git komutlarından bahsedeceğim.

--

--