GIT CLI ile Komut Komut Versiyonlama!

Nevcan Uludaş
Front-End Developer
8 min readMay 10, 2017

GIT, kısa süre içerisinde yazılımcıların vazgeçilmezleri arasına giren bir sürüm/versiyon kontrol sistemidir. Hızlı olması ve az yer kaplaması tercih edilirliğini arttırmaktadır. GIT sayesinde birden fazla kişi aynı projede birbirlerinin kodlarını ezmeden çalışabilirler.

GIT’e başlamadan önce bilgisayarınıza GIT Bash kurmanız gerekiyor. Bu sayede linux komutlarını windows üzerinde çalıştırabilirsiniz. MacOS ya da linux kullanıcısıysanız terminal’i çalıştırmanız yeterli olacaktır.

UYARI : Bu konu kapsamında basit birkaç komut satırını biliyor olmanız gerekiyor. Bunlar; mkdir cd ls touch vim gibi temel komutlardır…

Hazırsak başlıyorum;

Yerel Depo (Local Repository) Kurulumu

Öncelikle projenizde GIT’i başlatmak (initialize) için terminalden (ya da GIT Bash’den) projenin bulunduğu dizine gelerek git init komutunu çalıştırın. Bu komut ile dizininizde .git isimli bir klasör oluşacaktır. Bu klasör ile hiç bir işimiz yok. O yüzden büyük ihtimalle bilgisayarınızda otomatik olarak gizli olmuştur.

Durum Kontrolü - GIT Status

Bu komutu ayrı bir başlık gibi açmamın nedeni çok sık kullanıyor olmamızdan kaynaklanıyor. Her aşamada git status komutunu çalıştırarak mevcut duruma bakmamız mümkündür. Hangi branch’da olduğumuz, değişiklik yapılmış dosyalar ya da yeni oluşturulan dosyalar veya commit’lerimize bu sayede hızlıca göz atabiliriz.

Örneğin proje dosyasının içerisinde nevcan.txt isimli yeni bir dosya oluşturdum. İlk iş git status komutu ile bunu kontrol etmek olacaktır.

git status

Gördüğünüz gibi nevcan.txt isimli dosya oluşmuş.

Bu işlemin sonucu için çok fazla cevap ile karşılaştığımız doğru. Sadece değişikliği görmek istediğimiz için git status -s komutu ile daha özet bir bilgiye erişmek de mümkündür.

git status -s

Buradaki -s (short) kısa anlamındadır.

Bunun gibi pek çok seçenek mevcuttur ama detaylarına bu makelede girmeyeceğim. Merak eden arkadaşlarımız git status -help komutunu çalıştırarak tüm seçenekler hakkında bilgi sahibi olabilirler.

git status -help

Merak ettiğiniz tüm komutların sonuna -help yazarak o komut hakkında detaylı bilgiye ulaşabilirsiniz.

Ya da --help yazarak çok daha detaylı bilgiyi tarayıcınızda görüntülenmesini sağlayabilirsiniz.

Yeni Oluşturulan ya da Değiştirilen Dosyaları Eklemek & Çıkartmak

Oluşturduğumuz nevcan.txt isimli dosya şuanda untracked olarak gözükmektedir.

untracked (izlenmeyen): GIT tarafından henüz takip edilmeyen, yani yeni oluşturulmuş dosyaları ifade eder.

unstaged (hazırlanmamış): Güncellenmiş ancak commit’lenmek için hazırlanmamış dosyaları ifade eder.

staged (hazırlanmış): Commit’lenmeye hazır olan dosyaları ifade eder.

deleted (silinmiş): Projeden silinmiş ama GIT üzerinden kaldırılmamış dosyaları ifade eder.

Şimdi yapmamız gereken oluşturduğumuz bu dosyayı commit’lemek üzere staged ortamına eklemeliyiz. Bunun için git add nevcan.txt komutunu kullanabiliriz.

Üzerinde değişiklik yapılan ya da yeni eklenen tüm dosyaları tek seferde eklemek için git add * ya da git add -A . komutlarını da kullanabilirsiniz.

Buradaki -A (all) tümü anlamındadır. “ . ” ise tüm dosya uzantılarını ifade eder. Yani git add -A .txt komutunu çalıştırsaydık tüm .txt uzantılı dosyaları staged ortamına eklerdi.

Şuanda nevcan.txt isimli dosyamız staged ortamında gözüküyor. Peki biz bu dosyayı commit’lemekten vaz geçersek tekrar nasıl staged ortamından çıkartabiliriz? Bunun için ihtiyacınız olan komut git reset nevcan.txt ‘dir. Bu komutla commit’lemek istemediğiniz dosyaları staged ortamından kolaylıkla çıkartabilirsiniz.

*ÖNEMLİ : git reset komutu dosyayı silmez. Sadece commit’lenmeye hazır durumda olma statüsünden çıkartır!

Değişiklikleri Commit’lemek

Commit, staged ortamına alınan dosyaların HEAD’e gönderilmesidir. Yapılan değişiklikler commit sonucu hala sizin local’inizdedir ve uzak sunucuya gönderilmesi için push edilmesi gerekir. Push işlemine daha sonra değineceğiz. Şimdiki işimiz staged ortamına aldığımız dosyaları, yaptığımız işin detaylarını da belirterek HEAD’e göndermek. Bunun için git commit -m "commit mesajınız buraya gelecek" düzeni kullanıyoruz.

Buradaki -m (message) mesaj anlamındadır.

Örneğimiz üzerineden devam edecek olursak; Jira üzerinden bize açılmış #123 ID’li bir issue olsun. Bu issue bize nevcan.txt isimli bir dosya oluşturmamız gerektiği yönünde bir brifing veriyor. Yukarıda yaptıklarımızı hatırlarsanız biz de istenildiği üzere nevcan.txt isimli dosyayı oluşturduk ve staged ortamına ekledik. Şimdi sıra commit’leme işleminde.

git commit -m "[#123 service:jira] nevcan.txt oluşturuldu."

ÖNEMLİ : Commit mesajlarının alaşılabilir olması oldukça önemlidir. Bunun için aşağıdaki paterni kullanmanızı tavsiye ederim.

[#issue-id service:service-name] Your commit message.
[#364 service:youtrack] Navigation component’i eklendi.

Evet değişikliklerimizi commit’ledik. Uzak sunucuya göndermeden önce yaptığımız değişiklikleri kontrol etmek ve yapılan işlemlere göz atmak isteyebiliriz.

Geçmiş (History) - GIT Log

En az git status kadar önemli olan bir başka komutumuz da git log ‘dur. Yaptığımız commit’lere ve olan değişikliklere bu komut ile bakmamız mümkündür. Geçmişten gelen bir günlük gibi tüm commit’lerimizi sırasıyla inceleyebiliriz.

$ git log$ git log --oneline // daha az bilgi için (one line = tek satır)$ git log --summary // daha fazla bilgi için (summary = özet)

Değişiklikleri “Remote Repository”ye Göndermek - GIT Push

Sıra şimdi local depomuzdaki commitleri uzak sunucuda bulunan depomuza göndermekte. Bunun için kullanacağımız komut git push origin master. Burada bahsi geçen origin remote repository’nin kök dizinini belirtir ve sabit bir isimdir. master ise sizin çalıştığınız branch (dal)’ı belirtir. Branch’larınıza istediğiniz gibi isim verebilirsiniz.

Henüz remote repository’niz yoksa bunun için git remote add origin http://uzak_deponun_adresi.git komutu ile local deponuzu uzak sunucudaki depoya bağlayabilirsiniz. Örnek olarak github.com adresinden “nevcan-git” isimli bir remote repository oluşturalım. Bana verdiği path “https://github.com/nevcanuludas/nevcan-git.git” şeklinde oldu. Local repository’de çalıştığım projeyi github üzerindeki remote repository’ye atmak için aşağıdaki komut satırını çalıştırmam yeterli olacak;

$ git remote add origin https://github.com/nevcanuludas/nevcan-git.git$ git push -u origin master

Burada kullandığımız -u parametreleri hatırlaması için kullanılmaktadır.

Değişiklikleri “Remote Repository”den Çekmek - GIT Pull

Üzerinde çalıştığınız dosyaları remote repository’ye gönderdikten sonra kendinizi ödüllendirmek için bir kahve molası verebilirsiniz ;) nevcan.txt isimli dosyamızda çalışmaya devam etmek için geri döndüğümüzde çalışma arkadaşınızdan alacağımız “nevcan.txt üzerinde değişiklik yaptım” içerikli bir mesaj bize çalışmak için güncel dosyaya sahip olmadığımızı bildirir.

Güncel değişiklikleri remote repository’den kendi local repository’mize çekmek için kullanacağımız komut git pull origin master‘dır. Bu sayede en güncel data local repository’nizde çalışmanız için yerini almış olur.

Temelde kullanacağımız komutlar git init git status git add git reset git commit — m "..." git log git push git pull bunlardan ibarettir.

Ama bu GIT’in sadece bu kadar ile sınırlı olduğu anlamına gelmez. Eğer merak ediyorsanız bir miktar daha devam edelim.

Dosyalardaki Değişiklikleri Karşılaştırmak - GIT Diff

Küçük örneklerde önemsiz gibi gözüksede, büyük projelerde dosyalarda yapılan değişiklikleri görmek önemli olacaktır. Staged area ve çalışma alanınız arasındaki değişiklikleri karşılaştırmak için git diff komutunu kullanabilirsiniz. Buradaki diff (differences) farklar anlamındadır.

Commit’lenmiş ama henüz push edilmemiş dosyalarınız ile çalışma alanınız arasındaki farklara bakmak isterseniz git diff HEAD komutu sizin için yeterli olacaktır.

Yapılan Değişiklikleri Geri Almak - GIT Checkout --

Bazı değişiklikler yaptınız ve sonra herhangi bir nedenden dolayı bu değişiklikleri kaydetmeden geri almak istiyorsunuz. Bu durumda kullanmanız gereken komut git checkout -- nevcan.txt. Bu sayede dosyanın HEAD’de bulunan (yani son commit’lenen) şeklini çalışma alanınıza geri çekmiş olursunuz.

Dosyaları Silmek - GIT RM

Herhangi bir dosyayı silmek istediğinizde git rm nevcan.txt komutunu kullanabilirsiniz. Tabiki bu dosyayı silebilmeniz için dosyanın workspace’inizde olması gerekiyor. git rm komutu ile işlenen dosyalar local deponuzdan anında silinmesine rağmen GIT üzerinde deleted statüsüne atanırlar. Siz push yapmadığınız sürece de remote repository’nizden silinmezler.

Burada rm (remove) kaldırmak anlamındadır.

Eğer silmek istediğiniz bir dosya değil bir dizin ise o zaman git rm -r dizin_ismi komutu olacaktır.

GIT Branch (Dallanma) Komutları

Proje üzerinde büyük değişiklikler yapacağınız ya da birden fazla issue’ya aynı zaman diliminde baktığınız zamanlarda GIT’in dallanma sistemini kullanmak sizi kod karşıklığından kurtaracaktır. Branch sistemini daha iyi anlamak için bu sayfaya göz atabilirsiniz.

  1. Proje dizininde iken sahip olduğunuz tüm branch’ları görmek istiyorsanız git branchkomutu ile tüm branch’larınızı listeleyebilirsiniz.
  2. Yeni bir branch olşturmak için git branch yeni_branch_ismi
  3. Branch değiştirmek ya da oluşturduğunuz yeni brach’a gitmek için git checkout branch_ismi komutunu çalıştırabilirsiniz.
  4. Eğer yeni bir branch oluşturmak ve hemen o branch’a gitmek istiyorsanız (yani üstteki iki adımı bir arada yapmak için) git checkout -b yeni_branch_ismi komutunu kullanabilirsiniz.
  5. Hali hazırda var olan bir branch’ı silmek istiyorsanız git branch -d branch_ismi

GIT Stash

Çalışmalarımza devam ederken güncel dosyaları çekmek isteyebiliriz. Bu tarz durumlarda çakışma olmaması içingit stash komutunu kullanarak çalışmakta olduğumuz dosyaları saklayabiliriz. Bu işlem pull’dan önce yapılmalıdır.

Pull işlemi tamamlandıktan sonra tekrar çalışmalarımızı stash’den almak için ise git stash apply komutu ile kaydedilmemiş çalışmalarımızı geri alabiliriz.

GIT Merge

Farklı bir branch’da çalışmamızı tamamladık ve artık bu branch’i projemize Dahil etmek istiyoruz. Bunun için git merge branch_ismi komutunu kullanabilirsiniz.

ÖZET

$ git init projede git’i başlatır.

$ git status mevcut yeni yaratılmış ya da üzerinde değişiklik yapılmış dosyaları ve stash dosyaları gösterir.

$ git status -s daha kısa bir gösterim sağlar.

$ git add nevcan.txt nevcan.txt dosyasını commit’lenmek üzere staged ortamına ekler.

$ git add -A . tüm untracked ve unstaged dosyaları commit’lenmek üzere staged ortamına ekler.

$ git reset nevcan.txt nevcan.txt dosyasının durumunu staged yerine untracked olacak şekilde geri alır.

$ git commit -m "commit mesajınız" staging area’daki dosyaları mesajınızla beraber commit’ler.

$ git log commit geçmişinizi görüntüler.

$ git log --oneline commit geçmişlerini birer satırda görüntüler.

$ git log --summary commit geçmişlerini detaylı olarak görüntüler.

$ git remote add origin http://{{path}}.git remote repository eklenir.

$ git push -u origin master commit’leri remote repository’ye gönderir.

$ git pull origin master remote repository’deki güncel datayı local repository’mize çeker.

$ git diff --staged sadece workspace ve staged area arasındaki farkları gösterir.

$ git diff HEAD workspace ve HEAD arasındaki farkları gösterir.

$ git checkout -- nevcan.txt HEAD’daki dosyayı workspace’inizdeki dosyanın üzerine yazar.

$ git rm nevcan.txt dosyayı deleted statüsüne taşır ve local’den siler.

$ git rm -r dizin-ismi dizini deleted statüsüne taşır ve local’den siler.

git branch yeni_branch_ismi yeni bir branch oluşturur.

git checkout yeni_branch_ismi HEAD’i hangi branch’a taşıyacağını belirler.

git checkout -b yeni_branch_ismi yeni bir branch oluşturur ve HEAD’i taşır.

git branch -d yeni_branch_ismi branch’ı siler.

git branch tüm branch’ları listeler ve “ * ” ile HEAD’in hangi branch’da olduğunu gösterir.

git stash pull işleminden önce çalışmaları saklamak için kullanılır.

git stash apply pull işleminden sonra çalışmaları geri almak için kullanılır.

git merge branch_ismibranch_ismi” isimli branch’ı “master branch” ile birleştirir.

--

--