💾 Programlama

Sıkça kullanılan git komutları

git ile ilgili kullanışlı özet bilgileri ve sık kullandığım bazı komutları bu yazıda derledim.

Yazılım ile uğraşıp bir çeşit sürüm kontrol sistemi (git, tfs, svn…) kullanmayan yoktur herhalde… Olmasın, ne olur olmasın…

Ben sürekli olarak git kullanıyorum ve sürekli olarak Github ile haşır neşir durumdayım. Böyle olunca kodu forklamak, pull, push, rebase, pull request yapmak vb. artık çay koymaktan farksız oldu.

Hal böyle olunca git ile ilgili kullanışlı özet bilgileri ve sık kullandığım bazı komutları burada derlemek istedim.

Yeni bir projeye başlarken

Aşağıdaki komutlar yeni bir projeye başlarken gerekiyor:

# Zaten bulunan bir repositoryi kendi bilgisayarınıza klonlayın
git clone [email protected]:ubenzer/sidenavjs.git

# Bulunduğunuz klasörde sıfırdan bir git repositorisi oluşturun
git init

# Uzaktaki sunucuyu remote olarak git'e ekleyin
# Genellikle birinci remote için origin adı kullanılır ama bu bir zorunluluk değildir. 
git remote add origin [email protected]:ubenzer/sidenavjs.git

# Uzaktaki ikinci bir sunucuyu da remote olarak ekleyin
git remote add syd [email protected]:sydboraa/sidenavjs.git

Neden iki ayrı remotea ihtiyaç duyulur?

Geliştirmenizi asıl repositoryde değil de kendi forkunuzda yapıyor ve çalışmanızı bitirdiğinizde kendi forkunuzdan ana repositorye pull request yaratıyorsanız iki remotelu çalışmak mantıklıdır. Böylelikle aynı projenin iki kopyası bilgisayarınızda bulunmaz. Ana repositoryden güncellemeleri almak daha kolay olur.

Çalışmaya başlarken

Aşağıdaki komutlar yeni bir işe başlarken gerekiyor:

# Uzaktaki tüm değişiklikleri yerele alın
# Bu aynı zamanda uzakta silinen tüm branch ve tagleri de yerelden temizler
git fetch --all --prune

# Üzerinden geliştirmeye başlayacağınız branche geçin
git checkout master

# Bu branchin son halini uzaktan alın
git pull origin master

# Bu branch üzerinden geliştirmeyi yapacağınız kendi branchinizi oluşturun. Bu komut master'da hali hazırda yapmış olduğunuz değişiklikleri de yeni branche aktarır.
git checkout -b TICKET-123

Yazılım geliştirirken & code review yaparken

Aşağıdaki komutlar yazılım geliştirirken ve geliştirdiğim yazılımı gönderirken gerekiyor. Aslına bakarsanız üstteki iki kategoriye uymayan her şey burada yer alıyor.

# Zaman zaman uzaktaki değişiklikleri kendi branchinize alın

# Uzaktan son değişiklikleri indir
git fetch --all --prune

# Commit edilmemiş değişiklikleri stashle
git stash

# Yereldeki commit edilmiş değişiklikleri uzaktan gelenlerin üzerine rebase yap
git rebase origin/master

# Rebase conflict oldu, iptal et
git rebase --abort

# Rebase conflict oldu, çözdük, conflictini çözdüğümüz dosyaları ekleyelim
git add file/i/fixed.js
# Rebase'e davam
git rebase --continue
# Rebase conflict oldu ama ben conflicti çözünce değişiklik kalmadı, devam edeyim
git rebase --skip

# Commit edilmemiş değişikleri geri al
git stash pop

# Github'daki bir pull requesti yerelde bir branch olarak oluştur (not: sadece branchi oluşturur, bu branche geçmez)
git fetch origin pull/PULLREQUESTNO/head:BRANCHADI

# Merge edilmiş bir branch sil
git branch -d branchadi

# Merge edilmemiş bir branch sil
git branch -D branchadi

# Uzaktaki bir branchi sil
git push origin :branchadi

# Commit yap
git commit -m "Commit mesajı"

# Yaptığın son commiti değiştir (not: git tarihçesini değiştirir, uzağa daha önce gönderdiyseniz artık force push yapmak zorundasınız)
git commit --amend

# Yaptığın son commiti iptal et (değişiklikleri tutarak)
git reset HEAD~1

# Yaptığın son commiti iptal et (değişiklikleri uçurarak)
git reset --hard HEAD~1 

# Bir branche geç
git checkout branchadi

# Bir committe geç
git checkout bcd0123 # commit hashinin benzersiz olan ilk bölümü, bu sizi detached head moduna sokacaktır

# Yaptıklarını uzaktaki sunucuya yolla (değişiklikler uzaktakiyle uyumlu)
git push origin branchadi

# Yaptıklarını uzaktaki sunucuya yolla (değişiklikler uzaktakiyle uyumlu değil)
git push -f origin branchadi

# Bulunduğun commiti tagle
git tag -a tagadi -m "Tag mesajı"

# Uzaktaki sunucuya bir tag pushla
git push origin tagadi

# Commit edilmemiş değiliklerin tamamını sil
git reset --hard

Yardımcı araçlar

Git ile uğraşırken her zaman komut satırını kullanmayı sevmiyorum. Özellikle bir committe değişen dosyalar, bir commitin git ağacında nerede olduğu veya bulunduğum branchin nereden türediği gibi şeyleri öğrenmem gerektiğinde görsel bir araç kullanmak daha kolay oluyor.

Böyle durumlar için iki araç önerebilirim.

İlk önerim Fork. Açık kaynak bu yazılım hem göze hitap ediyor, hem kullanması kolay hem de çok hızlı.

İkinci önerim Atlassian’ın Sourcetree uygulamasını. Bu yazılım da özellik olarak Fork’tan aşağı kalmıyor, ancak en azından Mac uygulaması oldukça yavaş.

Git öğrenmenize yardımcı dersler

Zamanında git öğrenirken kullandığım bir online oyun vardı. Yıllar sonra hala durduğunu görmek çok güze! 🙂

https://learngitbranching.js.org/ ‘da bulunan ücretsiz ve interaktif dersler git’i ezbere değil bilgi birikiminizle kullanmanızı sağlayacak.

Bitirirken

Sürüm kontrol sistemleri yazılım geliştirmenin en temel parçalarından biridir. Hobi amaçlı geliştirdiğiniz en ufak yazılımdan, uzaya gönderilecek roket için geliştirilen yazılıma kadar her şey bir sürüm kontrol sistemine sahip olmayı hak etmektedir. Eğer sürüm kontrol sisteminiz dosya yedek1, yedek2, yedekSON, yedekEnSONNN gibi klasörler açmak, kod paylaşım metodunuz flash disk ile yaptıklarınızı başkasına vermekse lütfen doğru yolu bulun.

İyi kodlamalar.