Git, modern yazılım geliştirme süreçlerinde, projeleri verimli bir şekilde yönetmek için yaygın olarak kullanılan güçlü bir sürüm kontrol sistemidir.

Development Stages Of A Traditional SDLC

İster yeni başlayan ister deneyimli bir geliştirici olun, Git komutlarında uzmanlaşmak projeler üzerinde işbirliği yapmak, değişiklikleri izlemek ve kod sürümlerini yönetmek için çok önemlidir. Ancak, başlangıçta Git'in karmaşık yapısı ve komutları, yeni başlayanlar için kafa karıştırıcı olabilir. Bu blog yazısında en yaygın Git komutlarından bahsedeceğim.

Git Deposu Oluşturmak ve Yapılandırmak

Repo projesini oluşturun:

git init test

Yapılandırma ayarlarını görüntüleme:

git config --list

Repo için varsayılan dalı ayarlayın (main veya master olarak düşünün):

git config --global init.defaultBranch main

Git için kullanılacak bilgileri ayarlayın:

git config --global user.name "[username]"
git config --global user.email [mail_address]

Config bilgilerini lokalde kaydet:

git config --global credential.helper store

Değişiklikleri İzleme ve Yönetme

Tüm dosyaları işleme ekleyin:

git add .

Belirli dosyaları işleme ekleyin:

git add file1 file2

Değişiklikleri kontrol edin:

git status

Yüklenecek dosyanın açıklamasını yapın:

git commit -m "commit mesajı"

İlgili bilgilerdeki değişikliklerin geçmişini izleyin:

git log

Tüm dalların tek satır formatında commit geçmişini gösterin:

git log --all --oneline

Uzak Depo İşlemleri

Uzak depoyu klonla:

git clone [repo_url]

Uzak depo bilgilerini görüntüle:

git remote -v

Uzak depodan güncellemeleri al:

git pull

Yerel değişiklikleri uzak depoya gönder:

git push

Dal Yönetimi

Dalları görüntülemek:

git branch

Yeni dal oluşturmak:

git branch [new_branch]

Yeni bir dal oluşturuken aynı zamanda o dala geçiş yap:

git checkout -b [new_branch]

Farklı bir dala geçiş yapmak:

git checkout [other_branch]

Yeni dalı mevcut dala birleştirin:

git merge [new_branch]

Dalı silmek:

git branch -d [new_branch]

Dalı yeniden adlandır:

git branch -m [eski_dal_adı] [yeni_dal_adı]

Uzak depoda yeni bir dal oluştur:

git push origin [yeni_dal_adı]

Uzak daldaki değişiklikleri yerel dala çek:

git fetch origin [uzak_dal_adı]:[yerel_dal_adı]

Değişiklikleri İnceleme

Geçici olarak mevcut değişiklikleri saklayın:

git stash push

Saklanan değişiklikleri görüntüleyin:

git stash list

Saklanan değişiklikleri kaldırmadan yeniden uygulayın:

git stash apply

Saklanan değişiklikleri kaldırarak yeniden uygulayın:

git stash pop

Tüm saklanan değişiklikleri temizleyin:

git stash clear

Bir dosya üzerindeki değişiklikleri görüntülemek:

git blame [dosya_adı]

Bir dosya üzerindeki değişiklikleri karşılaştırmak:

git diff [dosya_adı]

Hatalı bir kod değişikliğinin hangi noktada gerçekleştiğini bulmak:

git bisect start
git bisect bad
git bisect good [commit_id]

Değişiklikleri Geri Alma

İstenilen sayıda commit'i sil:

git reset --soft HEAD~3
# veya
git rebase -i HEAD~3

git push origin main --force
git reset --hard

Değişiklikleri belirli bir commit'e geri al:

git revert [commit_id]

Değişiklikleri tamamen geri al (dikkatli kullanın, tüm geçmişi sıfırlar)

git reset --hard [commit_id]

### Tipik Bir Git Akışı

git init
git remote add origin https://github.com/username/project-name
git add .
git commit -m "Initial commit: Set up basic project structure and functionalities"
git branch -M main
git push -uf origin main
git clone https://github.com/username/project-name.git
cp -R local-repo/* downloaded-repo/
cd downloaded-repo/
git add .
git commit -m "Initial commit: Set up basic project structure and functionalities"
git push origin main

Geleneksel Commit Mesajları

Proje ortamında tutarlı ve açık commit mesajları sağlamak için Conventional Commits Specification'i takip etmelisiniz. Bu, commit mesajlarınızın bir düzen içinde olmasını sağlar ve takımınızın iş akışını kolaylaştırır. Örneğin:

Commit Mesajları Formatı

type: Subject

body

footer

type (tür):

feat: Yeni bir özellik eklenirken kullanılır.
fix: Bir hata düzeltildiğinde kullanılır.
docs: Belgelendirmeye ilişkin değişiklikler için kullanılır.
style: Kod düzenlemeleri (beyaz boşluk, biçimlendirme) için kullanılır.
refactor: Kodun yeniden düzenlenmesi, yapısal değişiklikler için kullanılır.
test: Testlerle ilgili değişiklikler için kullanılır.
chore: Yardımcı araçlar ve işlemlerle ilgili değişiklikler için kullanılır.

subject (konu):

Subject; büyük harfle başlamalı, 50 karakteri geçmemeli ve nokta ile bitmemelidir. Açıklamada yapılan işi belirtmek için emir tonu kullanın ve neyi değiştirdiğinizi veya eklediğinizi açıkça ifade edin.

body (gövde):

Body; commit'inizin daha ayrıntılı bir açıklamasını içerir. İhtiyaca bağlı olarak kullanılır ve değişikliklerin neden yapıldığını, nasıl yapıldığını veya diğer ilgili ayrıntıları içerebilir. Genellikle daha büyük ve karmaşık değişiklikler için kullanışlıdır.

footer (altbilgi):

Footer; commit ile ilgili referanslar veya kapatılması gereken sorun numaraları gibi ek bilgileri içerebilir.

Example:

feat: Add user authentication feature

Implemented user authentication functionality to allow users to securely log in and manage their accounts.

- Added user login and registration forms
- Implemented password hashing for security
- Created user session management
- Added "Forgot Password" feature

Closes #27

.gitignore Dosyası

Projenizin kök dizininde bir .gitignore dosyası oluşturarak Git'in izlememesini istediğiniz dosyaları ve klasörleri tanımlayabilirsiniz. Örneğin:

# Derleme dosyaları
*.o
*.out

# IDE ve editör özel dosyaları
.vscode/
.idea/

# Modüller
node_modules/

Sık Karşılaşılan Hatalar ve Çözümleri

Error:

! [remote rejected] main -> main (pre-receive hook declined)
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https[:]//gitlab.com/username/myproject.git'

Çözümü:

git pull origin main --rebase
git fetch origin main
git push -f origin main

Error:

From https[:]//gitlab.com/username/myproject
* branch main -> FETCH_HEAD
fatal: refusing to merge unrelated histories

Çözümü:

git pull origin main --no-rebase --allow-unrelated-histories

Daha Fazla Kaynak ve Pratik İçin: