Post

07-İleri Seviye Komutlar 2

07-İleri Seviye Komutlar 2

Fork

  • fork komutu, bir projeyi kendi hesabınıza kopyalamanızı sağlar. Bu işlem, projenin orijinaline dokunmadan kendi projenizde değişiklik yapmanızı sağlar.

  • fork işlemi, projenin sağ üst köşesindeki “Fork” butonuna tıklayarak yapılabilir.

  • Forking bir Git işlemi değildir, ancak GitHub, GitLab ve Bitbucket gibi birçok Git barındırma hizmetinin sunduğu bir özelliktir.

Clone

  • clone komutu, bir projeyi GitHub, GitLab veya Bitbucket gibi bir Git barındırma hizmetinden yerel bilgisayarınıza kopyalamanızı sağlar.
1
git clone <repository-url>
  • clone komutu, projeyi kopyaladıktan sonra otomatik olarak origin adında bir remote ekler.

PRs From a Fork

  • pull request (PR) komutu, bir projenin orijinaline değişikliklerinizi göndermek için kullanılır.

  • Adımlar şu şekildedir:

    1. Orijinal projeyi forklayın.
    2. Yerel bilgisayarınıza fork’ladığınız projeyi kopyalayın.
    3. Yerel projenizde yeni bir branch oluşturun ve değişiklikler yapın.
    4. Değişikliklerinizi commit edin.
    5. Değişikliklerinizi GitHub’a göndermek için push komutunu kullanın.
    6. GitHub’da, orijinal projenin sayfasına gidin.
    7. “Pull Request” butonuna tıklayın.
    8. Değişikliklerinizi açıklayan bir başlık ve açıklama ekleyin.
    9. “Create Pull Request” butonuna tıklayın.

Reflog

  • reflog komutu, HEAD referansındaki tüm değişiklikleri gösterir.
1
git reflog

Örnek Bir Senaryo

  • Üzerinde çalıştığımız repository’de yeni bir dosya oluşturup, bu dosyada değişiklikler yapalım.
1
git switch main
  • Yeni bir dosya oluşturalım ve değişiklikleri commit edelim.
1
nano test-file.md
1
2
git add test-file.md
git commit -m "I: Add test-file.txt"
1
git reflog
  • git reset --hard HEAD@{1} komutu ile son commit’e geri dönelim.
1
git reset --hard HEAD@{1}
  • git reflog komutu ile geri dönüş işleminin kaydını görelim.
1
git reflog

Merge

  • git merge <commithash> komutu, belirtilen commit’i mevcut branch’e ekler.

  • git reset komutu ile kaybolan commit’leri geri getirebiliriz.

1
git reflog
  • git merge komutu ile commit’i geri getirelim.
1
git merge <commithash>

Conflicting Changes

  • conflicting changes (çakışan değişiklikler), iki farklı branch’te aynı satırlarda yapılan değişikliklerdir.

  • conflicting changes durumunda, Git otomatik olarak birleştirme işlemi gerçekleştiremez ve çakışan değişiklikleri çözmeniz gerekir. Örneğin:

    • İki farklı branch’te aynı satırda farklı değişiklikler yapılmışsa.
    • Bir branch’te bir satır silinmişken, diğer branch’te aynı satıra yeni bir satır eklenmişse.
1
git switch -c add_customers
1
nano titles.md
1
- Forrest Gump
1
2
git add titles.md
git commit -m "K: Add Forrest Gump in titles.md"
1
git switch main
1
nano titles.md
1
- The Shawshank Redemption
1
2
git add titles.md
git commit -m "J: Add The Shawshank Redemption in titles.md"
  • git merge komutu ile iki branch’i birleştirelim.
1
git switch add_customers
1
git merge main
  • Şöyle bir hata alacağız:
1
Automatic merge failed; fix conflicts and then commit the result.
  • Çakışmaları çözmek manuel bir işlemdir. Çakışmalar gerçekleştiğinde, Git çakışan dosyaları işaretler ve dosyaları düzenleyicinizde düzenleyerek çakışmayı çözmenizi ister.
1
2
3
4
5
6
<<<<<<< HEAD
- Forrest Gump
=======
- The Shawshank Redemption
>>>>>>> main

  • En üstteki bölüm, ««« HEAD ve ======= satırları arasında kalan kısım, dosyamızın dalımızdaki sürümüdür. ======= ve »»»> main satırları arasında kalan kısım ise, birleştirmeye çalıştığımız branch’teki sürümüdür.

  • Bu durumda çakışma mesajlarını silip, hem add_customers hem de main branch’lerindeki değişiklikleri içerecek şekilde dosyayı düzenleyelim.

1
2
- Forrest Gump
- The Shawshank Redemption
  • Düzenleme işleminden sonra dosyayı kaydedip, commit edelim.
1
2
git add titles.md
git commit -m "L: Merge main into add_customers"
  • Değişiklikleri main branch’ine gönderelim.
1
git switch main
1
git merge add_customers
  • add_customers branch’ini silelim.
1
git branch -d add_customers

Checkout conflicts

  • Çakışmaları çözmek için dosyaları manuel olarak düzenledik, ancak Git’in bize yardımcı olacak bazı yerleşik araçları bulunur.

  • git checkout komutu, –theirs veya –ours bayraklarını kullanarak birleştirme çakışması sırasında yapılan değişiklikleri tek tek kontrol edebilir.

  • Yeni bir branch oluşturalım ve bu branch’te bazı değişiklikler yapalım.

1
git switch -c delete_records
1
nano classic.csv
  • En alttaki satırı silelim.
1
nano contents.md
  • En alttaki satırı silelim.

  • Ardından commit edelim.

1
2
git add classic.csv contents.md
git commit -m "M: Delete the last record in classic.csv and change the last line in contents.md"
  • main branch’ine geri dönelim ve aynı satırlarda değişiklikler yapalım.
1
git switch main
1
nano classic.csv
  • En alttaki satırı değiştirelim.
1
nano contents.md
  • En alttaki satırı değiştirelim.

  • Ardından commit edelim.

1
2
git add classic.csv contents.md
git commit -m "N: Change the last record in classic.csv and change the last line in contents.md"
  • delete_records branch’ini main branch’ine birleştirelim.
1
git merge delete_records
  • Çakışma mesajı alacağız.

  • git checkout komutu ile çakışmaları çözelim.

1
git checkout --theirs classic.csv
1
git checkout --ours contents.md
  • Değişiklikleri commit edelim.
1
2
git add classic.csv contents.md
git commit -m "O: Merge delete_records into main"

Rebase Conflicts

  • rebasekomutu ile oluşabilecek çakışmaları inceleyelim.

  • Yeni bir branch oluşturalım ve bu branch’e yeni bir dosya ekleyelim.

1
git switch -c banned
1
nano banned.csv
1
2
3
first_name,last_name,company,title
Kayha,tbd,TheMarchOfTime,sidekick
sam,ctrlman,closedai,ceo
  • Ardından commit edelim.
1
2
git add banned.csv
git commit -m "P: Add banned.csv"
  • main branch’ine geri dönelim ve aynı dosyayı oluşturup, farklı bir değişiklik yapalım.
1
git switch main
1
nano banned.csv
1
2
3
first_name,last_name,company,title
Ballan,Agrandian,Boots.lore,Protagonist
sam,ctrlman,closedai,ceo
  • Ardından commit edelim.
1
2
git add banned.csv
git commit -m "R: Add banned.csv"
  • banned branch’ini main branch’ine rebase edelim.
1
git switch banned
1
git rebase main
  • Çakışma mesajı alacağız.Ayrıca hangi branch Üzerinde olduğumuzu inceleyelim.
1
git branch
  • Diğer branch üzerinden gelen değişiklikleri kabul etmek istiyoruz. Çakışmayı nasıl çözeriz?
1
git checkout --ours banned.csv
  • Değişiklikleri ekleyelim fakat commit etmeyelim.
1
git add banned.csv
1
git log --oneline
  • Rebase işlemini devam ettirelim.
1
git rebase --continue
  • Rebase işlemi tamamlandıktan sonra, git log –oneline komutu ile commit geçmişini inceleyelim.
1
git log --oneline
  • main branch’ine geri dönelim ve banned branch’ini silelim.
1
2
git switch main
git branch -d banned

Squash

  • squash komutu, birden fazla commit’i tek bir commit haline getirir.

squash

  • Yeni bir branch oluşturalım ve bu branch’e geçelim.
1
git switch -c temp_main
  • Bazı değişiklikler yapalım ve commit edelim.
1
nano contents.md
1
- classic.csv: A list of classic movies
1
2
git add contents.md
git commit -m "Q: Add classic.csv to contents.md"
1
2
3
```bash 
nano classic.csv
1
The Shawshank Redemption, Frank Darabont, 1994
1
2
git add classic.csv
git commit -m "S: Add The Shawshank Redemption to classic.csv"
1
nano customers.csv
1
Kayha,tbd,TheMarchOfTime,sidekick
1
2
git add customers.csv
git commit -m "T: Add customers.csv"
  • git rebase -i HEAD~3 komutu ile son 3 commit’i birleştirelim.
1
git rebase -i HEAD~3
  • İlk commit’i pick olarak bırakalım, diğer iki commit’i squash olarak değiştirelim.
1
2
3
pick 1e3f4d1 Q: Add classic.csv to contents.md
squash 2e3f4d2 R: Add The Shawshank Redemption to classic.csv
squash 3e3f4d3 S: Add customers.csv
  • Değişiklikleri kaydedip, kapatın.

  • Yeni bir commit mesajı oluşturun ve kaydedin.

1
Q: redacted.    
  • git log --oneline komutu ile commit geçmişini inceleyelim.
1
git log --oneline

Stash

  • stash komutu, çalışma dizinindeki değişiklikleri geçici olarak saklar. Bu bilgisayarımızdaki kopyala/yapıştır panosu gibi çalışır.

  • Bazı değişiklikler yapalım ve bunları stash ile saklayalım.

1
nano contents.md
1
- banned.csv: A list of banned customers
1
git stash
1
cat contents.md
  • Değişikliklerin kaybolduğunu göreceksiniz.

  • git stashkomutunun bazı opsiyonları vardır fakat en sık kullanılanlar:

    • git stash list: Stash listesini gösterir.
    • git stash pop: Stash listesindeki en son değişiklikleri uygular ve siler.
  • git stash pop komutu ile değişiklikleri geri getirelim.

1
git stash pop
  • Git stash komutu değişikliklerinizi bir stack (LIFO) veri yapısında depolar. Bu, değişikliklerinizi stash’ten aldığınızda her zaman en son değişiklikleri ilk alacağınız anlamına gelir.

stash

  • Saklamak istediğiniz değişiklikleri belirli bir mesajla saklayabilirsiniz.
1
git stash  -m "Add banned.csv to contents.md"
1
git stash list
  • Stash listesindeki değişiklikleri uygulayabilirsiniz.
1
git stash apply 
  • Stash listesindeki değişiklikleri silebilirsiniz.
1
git stash drop
  • Son değişiklikleri commit edelim.
1
2
git add contents.md
git commit -m "U: Add banned.csv to contents.md"

Revert

  • revert komutu, belirli bir commit’i geri alır ve yeni bir commit oluşturur. Yapılan değişikliği geri alır ancak değişikliğin ve geri alınmasının tam geçmişini tutar.
1
git log --oneline
  • revert komutu ile son commit’i geri alalım.
1
git revert commit-hash
1
git log --oneline
1
cat contents.md
  • Kalabalık ekip projelerinde, revert komutu, bir commit’i geri almanın en güvenli yoludur. Bu, diğer geliştiricilerin çalışmalarını etkilemeden bir değişikliği geri almanıza olanak tanır.

Cherry-pick

  • cherry-pick komutu, belirli bir commit’i mevcut branch’e ekler. Bu, belirli bir commit’i başka bir branch’ten almanıza olanak tanır.

  • Yeni bir branch oluşturalım ve bu branch’e geçelim.

1
git switch -c add_partners
1
nano test-file.md
1
test kontrol edildi
1
2
git add test-file.md
git commit -m "V: Add test-file.md"
  • Aynı dosyada farklı bir değişiklik yapalım ve commit edelim.
1
nano test-file.md
1
test kontrol edildi ve onaylandı
1
2
git add test-file.md
git commit -m "Y: Add test-file.md"
1
git log --oneline
  • Almak istediğimiz commit’in hash’ini kopyalayalım ve cherry-pick komutunu kullanarak bu commit’i main branch’ine ekleyelim.
1
git switch main
1
git cherry-pick commit-hash
1
git branch -d add_partners

Tags

  • tag komutu, belirli bir commit’e etiket ekler. Bu, belirli bir commit’i daha kolay bir şekilde referans almanıza olanak tanır.

  • Etiketler oluşturulabilir ve silinebilir, ancak bir kez oluşturulduktan sonra değiştirilemez.

  • git tag komutu ile mevcut etiketleri görebilirsiniz. Yeni bir etiket oluşturmak için git tag <tag-name> komutunu kullanabilirsiniz.

  • Yeni bir etiket oluşturalım.

1
git tag -a v1.0 -m "Release v1.0"
  • git tag komutu ile etiketi görelim.
1
git tag
1
git log --oneline

Semver

  • Semver (Semantic Versioning), yazılım sürümlerini belirlemek için kullanılan bir standarttır.

semver

  • MAJOR değişiklikler yaptığımızda BÜYÜK artışlar (bu genellikle büyük bir sürümdür, örneğin Python 2 -> Python 3)

  • MINOR değişiklikler yaptığımızda KÜÇÜK artışlar (bu genellikle yeni özellikler eklemek anlamına gelir)

  • PATCH değişiklikler yaptığımızda düzeltmeler ve küçük değişiklikler (bu genellikle hata düzeltmeleri ve küçük iyileştirmeler anlamına gelir)

SORU

  • ‘En yüksek’ versiyon hangisidir?

A) v4.22.5 B) v4.2.999 C) v3.111.0 D) v3.11.111

  • Geçmişteki bir commit’e tag eklemek için aşağıdaki komutu kullanabiliriz.
1
git tag <tag-name> <commit-hash> -m "<tag-message>"
This post is licensed under CC BY 4.0 by the author.

Trending Tags