git – fetch vs pull

Merhaba, git bünyesinde birçok komut var bazılarının görevleri birbirlerine çok yakın gibi gözüküyor. Ben de bazılarını baya karıştırdım ve bu yazıyı yazmaya karar verdim. Bu yazımda fetch ve pull komutlarının asıl görevleri nelerdir onlardan bahsedeceğim.

git fetch

Bu komut remote’daki tüm commitleri local’e çeker. Fakat çekilen commitler remote branch’lar olarak depolanır, local olarak değil. Bu sayede local’deki kodla merge etmeden önce gözden geçirme şansı verir.

git fetch <remoterepo>
remote-repo‘daki tüm commit ve dosyaları çeker.

git fetch <remote-repo > <branch>
remote-repo içerisindeki sadece belirtilen branch içerisindeki tüm commit ve dosyaları çeker.

fetch komutu, local’deki dosyaların üzerine hiçbir etkisi yoktur, sadece kim ne katkı yapmış onu görmenizi sağlar. Tabii ki dosyaları çektiğiniz kodları kendiniz merge işlemlerini de gerçekleştirebilirsiniz.

Örnek senaryo:

git fetch origin
git checkout master
git log origin/master
git merge origin/master

git log master..origin/master komutuyla merge etmeden önce hızlıca commitleri gözden geçirebilirsiniz.

git pull

Bu komut, upstream’deki dosyaları çeker ve local’deki kodla direk birleştirir. İki kodun birleşimi şeklinde düşünülebilir:
git pull = git fetch + git merge
Bu sebeple fetch komutu bu komuttan daha güvenlidir diyebiliriz.

git pull <remote-repo>
remote-repo‘yu fetch eder ve local’deki bulunan branch ile birleştirir.
git fetch + git merge origin/<current-branch>

git pull –rebase <remote>
Merge etmek yerine rebase eder.

Örnek senaryo:

git checkout master 
git pull --rebase origin 

Bir önceki git yazıma buradan ulaşabilirsiniz.