Bi tık ileri seviye GİT
* Bu yazı 03 Şubat 2025 tarihinde güncellenmiştir.
____________________________
Merhaba dostlarrr..
Nasılsınız bakalım :))
Bloğumda en çok okunan yazılar kısmı var. Orada Git Komutları yazısı başı çekiyor. Aslında o yazıda ben sık kullandığım git komutlarını size anlatacaktım ve yazı kısa olacaktı. Yani öyle düşünüyordum. Gaza gelip içerik ekledikçe utanmasam komple git komutlarını bu yazıya ekleyecektim.
Utandım.. :)
Eklerim eklemesine de siz okurken kafa bi dünya olur. Aradığınızı bulamayabilirsiniz. Bunu yapmak ayıptır. Bana yakışmaz. O yazıdaki içeriğe sadık kalarak sadece sık kullandıklarımı oraya ekleyeceğim. Bu yazıda ise diğer git komutlarını ve git ile ilgili tüm kaynakları buraya yazacağım.
Bi tık ileri seviye dediğim aslında nedir?
"Bi tık ileri seviye" demek başlangıcın biraz üstü demek. Yukarıda bahsettiğim ilk yazımın başlığını "Git Komutları Temeller" olarak değiştirdim.
Bi sor bakalım niye böyle yaptım? :)
Ayrı bir sayfa açıp, sık kullanılan basit ve temel komutlardan ziyade biraz daha ileri seviye diyebileceğimiz bilgileri buraya yazmak istiyorum. Artık buna ister bi tık ileri seviye deyin isterseniz de profesyonel kullanım deyin.. İçerikleri ayırmak şart oldu. Yoksa güzelim masumane yazım karman çorban bilgilerle dolmaya başlamıştı.
Buraya ekleyeceğim bilgiler herhangi bir sıra ile gitmeyecek. Güncel olarak bulabildiğim bilgileri burada sizlere sunacağım. Hemen bugün bulduğum bir bilgi ile başlayalım..
1. Konu: Git squash vs rebase vs merge
Kodunuzu git ile sürüm kontrolü yaparken, özellik dallarını ana dalla birleştirirken genellikle üç seçenek vardır. Her birinin kendine has tuhaflıkları vardır, peki hangisini kullanmalısınız?
![]() |
makale ve türkçe çevirisi |
Peki bu bilgi bizim ne işimize yarayacak? Şöyle arkadaşlar, Hüseyin BABAL abimiz git ile ilgili ileri seviye sayılabilecek bilgiler paylaşmış. Türkçe içeriğe sahip videosunun kendisi altta, videonun linkide şurada Yukarıdaki görseldeki bilgi ile aşağıdaki videounun içeriği bir biriyle örtüşüyor. Bu yüzden üstteki görseldeki olayı tam anlamadıysanız aşağıdaki videoyu izlerseniz anlayabilirsiniz.
Hüseyin BABAL - [TR] Using Git Like a Hero - https://www.youtube.com/watch?v=m0X5Dv_B36g
2. Konu: Git Komutlarını Değil, Kavramlarını Öğrenin
Git kullanmak istiyorsunuz, değil mi? Ama sadece komutları öğrenmek değil, ne kullandığınızı anlamak mı istiyorsunuz? O zaman bu sizin için!
Bu makalemizde diğer bir güncel makalelerden.. Biraz uzunca.. Ama anlaşılır..
![]() |
Git'in komutlarını değil nasıl çalıştığını öğrenin - https://dev.to/unseenwizzard/learn-git-concepts-not-commands-4gjc |
Makalenin içeriği epey bi uzun. Ben size o makaleden başlıkları göstermek istiyorum;
- Genel Bir Bakış
- Remote Bir Repository Almak
- Yeni Şeyler Eklemek
- Değişiklikler Yapma
- Branching
- Merging
- Fast-Forward Merging
- Farklı Branchler ile Merge
- Conflictleri (Çakışmaları) Çözmek
- Rebasing
- Conflictleri Çözmek
- Remote Değişikliklerle Dev Environment’ı Güncellemek
- Değişiklikleri Almak (Fetching)
- Değişikleri Çekmek (Pulling)
- Değişiklikleri Zulalamak (Stashing)
- Conflictlerle Beraber Pull
- Cımbızlamak (cherry picking)
- Geçmişi Tekrar Yazmak
- Son Commit’i Düzenlemek
- İnteraktif Rebase
- Public Geçmiş, Neden Tekrar Yazmamalısınız ve Yine de Nasıl Güvenli Bir Şekilde Yapabilirsiniz
- Geçmişi Okumak
Bu makale ile ilişkili linkler
- Git nasıl öğretilir? https://rachelcarmena.github.io/2018/12/12/how-to-teach-git.html
- Git Zorlukları - https://www.slideshare.net/raquelmorenocarmena/git-challenges
- Linus Torvalds'ın en büyük icadı - http://perl.plover.com/yak/git/
- Tech Talk: Git'te Linus Torvalds - https://www.youtube.com/watch?v=4XpnKHJAok8
- Linux.conf.au 2013 - 4 Yaş ve Üzeri için Git - https://www.youtube.com/watch?v=1ffBJ4sVUb4
- Aşağıdan Yukarıya Git - https://jwiegley.github.io/git-from-the-bottom-up
- Aşağıdan Yukarıya Git (PDF) - http://ftp.newartisans.com/pub/git.from.bottom.up.pdf
- Git Dallandırmayı Öğrenin - https://learngitbranching.js.org/
- Git için uçuş kuralları - https://github.com/k88hudson/git-flight-rules
- Emacs paketi: Magit - https://magit.vc/
- İyi Bir Commit Mesajı Nasıl Yazılır? - https://chris.beams.io/posts/git-commit/
- Git gurusu ol - https://www.atlassian.com/git/tutorials
- Git Daldırma - http://gitimmersion.com/
- Udacity: Git ve GitHub Nasıl Kullanılır - https://eu.udacity.com/course/how-to-use-git-and-github--ud775#
- Pro Git kitabı - https://git-scm.com/book/en/v2
- Git ID'leri nasıl verir? https://blog.thoughtram.io/git/2014/11/18/the-anatomy-of-a-git-commit.html
3. Konu: Git Commit Mesajı Nasıl Yazılmalı
Git'i öğrendik ve kullanmaya başladık. Yazılım işleriyle epeydir uğraşanlar Git'i kullanırken daha rahat etmek için config mesajlarının güzel olmasına karar vermişler. Yazılım işinde herkesin farklı iş yapmaması ve belli standartlarda anlaşılıp ona göre çalışılması yazılımcılar için iyi sonuçlar vermektedir. Git'in commit mesajlarını yazarken bazı dikkat edilecek noktaları varmış. O noktalara dikkat ederek çalışılırsa güzel olur. Neymiş bu dikkat edilmesi gereken şeyler derseniz buyu-run beraber bakalım.
Unutmadan, bir çok kişi commit mesajları nasıl yazılmalı diye yazı ve video paylaşmış. Linkleri alta makalenin sonuna eklerim. Ben bu yazıda o paylaşılan bilgilerden bir derleme yapıp size sunuyorum.
- Başlık ve gövdeyi boş bir satır ile birbirinden ayırın
- Başlığı 50 karakter ile sınırlandırın
- Başlığa büyük harf ile başlayın
- Başlık satırını nokta ile sonlandırmayın
- Başlığı emir kipi ile yazın
- Gövde satırlarında 72 karakter uzunluğunu geçmeyin
- Gövdede neyi niçin değiştirdiğinizi açıklayın
4. Konu: Başka bir brancteki seçtiğim commiti bir başka branche kopyalamak
git log
git cherry-pick
5. Konu: Yanlışlıkla gönderdiğim son comiti yada belirlediğim commiti geri almak hiç yazılmamış gibi olmasını sağlamak
git reset --hard HEAD~1
git rebase branch_name
6. Konu: Gerekli olabilecek Listeleme komutları
7. Konu: Githuba ssh key nasıl ekleriz konulu yazı yazdım. Şurada:
https://gelistiricininnotlari.blogspot.com/2023/08/git-icin-ssh-key-nasl-kurulur-adm-adm.html
8. Konu: Uzak sunucudaki branchlerde işlem yapmak
* Branch konusuyla ilgili temel komutları şurada ele aldım.
Bilgisayarımızdaki branchleri görmek için; git branch komutunu kullanıyoruz.
Uzak sunucudaki (github vb. gibi) branchleri görmek için; git branch -r komutunu kullanıyoruz.
---------
Bilgisayarınızdaki branchler arası geçiş yapmak için; git switch branchadı yada git checkout branchadı komutunu kullanıyoruz.
Uzak sunucudaki (github vb. gibi) branche geçiş yapabilmek için sadece: git checkout origin/branchadı komutunu kullanabiliyoruz. Git switch komutu maalesef burada işe yaramıyor.
Not: Uzak sunucudaki branchi açtığınızda iki işlem yapabilirsiniz. Ya vazgeçersiniz. Lokalinize dönersiniz. Bunun için branch değiştirmek yeterli olur.
Yada yeni bir branch oluşturabilir içinde çalışabilirsiniz.
9. Konu: Git Pull
Git pull iki işlemin kısaltılmışıdır. Şöyle ki; git pull = git fetch + git merge
git pull komutunu çalıştırmadan önce lokalinizdeki çalışmalarınızı mümkün mertebe git'e kaydedin. Aksi takdirde çakışma çıkabilir.
Çalışmalarınızı lokalde kaydettiğinizde ve sonra git pull komutuyla uzak sunucudaki dosyaları lokalinize çektiğinizde, uzak sunucuya göre ya geri yada ileride olabilirsiniz. Bunun için uzak sunucuya dosyalarınızı göndererek uzak sunucu ile siz eşit hizada olmuş olursunuz. İllaki uzak sunucu ile lokal aynı hizada olacak diye bir şart yok. Ben git pull olayını size anlatabilmek için bu şekilde örnek verdim.
![]() |
git'in branch sisteminin görsel anlatımı |
Git pull yerine git fetch kullansak?
Öyleyse bizim için ideal olan git pull yerine git fetch yapmamız olacaktır. Neden? Çünkü git fetch yapar isek uzak sunucudaki kodları lokalimize alır, inceler, gerekli görürsek kendi kodlarımızla birleştirme yaparız.
![]() |
Git pull & git fetch komutlarının görselleştirilmiş hali |
10. Konu: Git'e tanımlanmış user ve e-maili bulmak
Bilgisayarınızdaki git'e tanımladığınız user ve e-maili nasıl bulursunuz? İşte cevabı.
git config --global user.name : Bu komut size git'e tanımladığınız username'i verir.
git config --global user.email : Bu komut size git'e tanımladığınız user email'i verir.
11. Konu: Git'te windows ve linux satış başı/sonu uyumsuzluğu hatası
git bash kullanarak projemi git'e eklerken şöyle bir hata mesajı almıştım;
$ git add .
warning: in the working copy of 'c_calismalari.cbp', LF will be replaced by CRLF the next time Git touches it
Bu sorunu araştırdığımda güzel bir yazıya denk geldim. Hatanın temeli şuymuş; hem windows hemde linux kullanıyorsanız yada aynı dosyalarda birden çok farklı kişi çalışıyorsa (mac, linux, windows gibi) o zaman yazılar iç içe girmesin diye bir şeyler yapmanız gerekiyormuş. Yok ben sadece windowste geliştirme yapıyorum derseniz uyarıyı es geçebilirsiniz.
12. Konu: Github'ta branch'in ismini değiştirdiğinizde lokalde..
Benim bilgisayarımda master olarak ana branch açılıyor. Githubda ise bu main olarak geliyor. Bende githubdaki ismi master yapayım istedim. Ve yaptım da. Ayarlara girdim ordan yaptım geçtim.
Fakat github eğer bu repository'iniz bilgisayarınızda da kurulu ise orada da bazı kodları kullanarak değişiklikler yapabilirsiniz diye bize bir takım kodlar vermiş. Benim gibi sizde github'da ana branchin adını değiştirirseniz bu kodları muhakkak görürsünüz. Reponuzun ana sayfasına gidince hemen önünüze çıkıyor. Ben yinede genel kültür olarak buraya eklemek istiyorum;
If you have a local clone, you can update it by running the following commands.
(TR - Eğer yerel bir klonunuz varsa aşağıdaki komutları çalıştırarak güncelleyebilirsiniz.)
git branch -m main master
git fetch origin
git branch -u origin/master master
git remote set-head origin -a
Github'ta branch'in ismini değiştirdiğinizde |
13. Konu: Branchin ismini değiştirmek (Lokalde)
Bilgisayarınızda git üzerinde bir branchin adını değiştirmek istediğinizde aşağıdaki kodu uygulayın.
git branch -m branchismi yenibranchismi
14. Git'in çalışması hakkında güzel görsel (resim)
14. Uzak bağlantıları görmek için
Bilgisayarınıza projeyi klonladıktan sonra uzak bağlantıları görmek için şu komutu çalıştırın;
git remote -v
15. Komut geçmişini görmek için
Bilgisayarınıza projeyi klonladıktan sonra komut geçmişini görmek için şu komutu çalıştırın;16. Projenizde yapılan değişiklikleri görmek için
Bilgisayarınızdaki projenizde yapılan değişiklikleri görmek için şu komutu kullanabilirsiniz;
git diff
Bu komutu çalıştırdıktan sonra ekrana gelen yazılarda yeşil renk ile yazılanlar eklenen satırları, kırmızı renkli yazan yazılar ise çıkartılan yazıları gösteriyor.
17. Projenizdeki özel bir dosyada yapılan değişiklikleri görmek için
Projenizin genelinde değilde sadece belli bir dosyada yapılan değişiklikleri görmek için şu komutu çalıştırın;
git diff değişiklikleri_görmek_istediğiniz_dosyanın_ismi.txt
18. Geçeci alandaki değişiklikleri görmek için
Projenizde çalışırken yaptığınız değişiklikleri geçici alana taşımak için git add . yaptınız diyelim. Fakat ben geçici alana gönderdiğim çalışmalarımda neler değişmiş diye merak edip görmek istersem şu komutu kullanabiliyorum;
git diff --staged
19. Geçeci alandaki değişiklikleri tek tek yada toplu şekilde geri almak için
Projenizde çalışırken yaptığınız değişiklikleri geçici alana taşımak için git add . yaptınız diyelim. Fakat ben geçici alana gönderdiğim çalışmalarımdan vazgeçtim ve geri almak istedim diyelim. Bununda iki yolu var. 1- Toplu geri alma işlemi 2- Tek tek geri alma işlemi
1-Toplu geri alma işlemi:
git add . ile geçici alana gönderdiğim çalışmalarımı toplu şekilde geri almak istiyorsam şu komutu çalıştırmalıyım;
git restore .
2- Tek tek geri alma işlemi
git add . ile geçici alana gönderdiğim çalışmalarımın sadece bazı dosyaları geri almak istiyorsam şu komutu çalıştırmalıyım;
git restore geri_almak_istediğim_dosya_ismi
20. Geçeci alandaki dosyaları geri çıkarmak için
git add . ile geçici alana gönderdiğim dosyaları geri çıkarmak istiyorsam şu komutu çalıştırmalıyım;
git reset
Uyarı: Bu komut geçici alana gönderdiğiniz dosyaları geri çıkarır fakat çalışma alanındaki değişiklikleri silmiyor. Yani dosya içerikleri silinmiyor. Dosya içerikleri de silinsin isterseniz şu komutu çalıştırın;
git restore .
Sadece belli bir dosyayı geçici alandan çıkarmak istiyorsam şu komutu çalıştırın;
git reset dosya_ismi.txt
Bu makale ile ilişkili linkler ve kaynaklar
- https://serdarkuzucu.com/2020/04/19/git-commit-mesaji-nasil-yazilmali/
- https://corgibytes.com/blog/2019/03/20/commit-messages/
- https://vigo.github.io/git-puf-noktalari/bolum-01/14-iyi-bir-commit-mesaji-nasil-olmali/
- http://who-t.blogspot.com/2009/12/on-commit-messages.html
- https://youtu.be/4IJenO6K1-Q?t=320
- https://git.kernel.org/pub/scm/git/git.git/tree/Documentation/SubmittingPatches?id=HEAD
- https://www.freecodecamp.org/news/writing-good-commit-messages-a-practical-guide
- https://www.youtube.com/watch?v=CJMt1ovAATA
- https://hwclass.medium.com/git-k%C3%BClt%C3%BCr%C3%BC-1-a70435b5202d
- https://mucahidyazar.medium.com/git-komutlar%C4%B1-66336e53f96e
- https://www.cenuta.com/blog/github-nedir-github-kullanimi-ve-basit-git-komutlari/
- https://twitter.com/codewithmustafa/status/1667468338937593857
- https://www.youtube.com/watch?v=0chZFIZLR_0
- Bilinmesi gereken modern git komutları
- Git'in Gizli Kahramanları: autocrlf, EOL ve .gitattributes Dosyası
- Kodla; git ve github eğitimi (youtube)
Yorumlar
Yorum Gönder