Push yapmak, yerel commit'leri uzak bir Git deposuna göndermek ve bunları ekip üyelerinin kullanımına sunmak anlamına gelir. Push'tan sonra değişiklikler GitHub, GitLab veya Bitbucket'te görünür. GitHub Octoverse 2024'e göre, platforma her gün 10 milyondan fazla commit push'lanmaktadır. Git push, dağıtık bir ekipte çalışmayı senkronize etmek için önemli bir eylemdir.
Anahtar Noktalar
Git push, commit'leri yerel depodan uzak depoya aktaran bir komuttur. Değişiklikleri yalnızca geliştiricinin yerel makinesinde kaydeden commit'in aksine, push bu değişiklikleri tüm ekip için yayınlar. Push, Pull Request oluşturma ve dağıtımdan önce zorunlu bir adımdır.
Git'in mimarisi, her geliştiricinin kendi yerel deposunda çalıştığını varsayar. Commit'ler yerel olarak oluşturulur ve geliştirici push yapmaya karar verene kadar birikir. Bu özgürlük sağlar: birçok yerel commit yapabilir, deneyebilir ve iş arkadaşlarını etkilemeden geçmişi yeniden yazabilirsiniz.
# Origin remote'e, main dalına push
git push origin main
# Geçerli dalı upstream ile remote'a push
git push -u origin feature/new-dashboard
# Eşleşen adlara sahip tüm dalları push
git push --all origin
# Kiralı force push (güvenli force push)
git push --force-with-lease
Push'tan sonra, uzak depo ref'leri (dal referansları) yeni commit'leri gösterecek şekilde günceller. Diğer geliştiriciler bu değişiklikleri git pull veya git fetch aracılığıyla alabilir. Bu commit alışverişi, işbirlikçi geliştirmenin temelini oluşturur.
Git push komutu, yerel ve uzak dalları karşılaştırır ve yalnızca eksik commit'leri aktarır. Git tüm dosyaları yeniden göndermez — yalnızca delta'yı aktarır, bu da büyük depolarda bile push'u hızlı yapar. Git Protokolü, iletilen veri miktarını en aza indiren akıllı aktarım kullanır.
Uzak dal, yerel olarak bulunmayan commit'ler içeriyorsa, push reddedilecektir. Bu, değişiklik kaybını önleyen koruyucu bir mekanizmadır. Bu durumda, geliştirici önce git pull'u çalıştırmalı, değişiklikleri birleştirmeli ve ancak ondan sonra tekrar push yapmalıdır. Bir alternatif, uzak dalın üzerine yazan force push'tur, ancak dikkatli kullanılmalıdır.
| Komut | Eylem | Ne Zaman Kullanılır |
|---|---|---|
| git push | izlenen dala standart push | normal değişiklik gönderimi |
| git push -u | upstream kurulumuyla push | yeni bir dalın ilk push'u |
| git push --force-with-lease | güvenli force push | dalınızı rebase ettikten sonra |
| git push --force | zorla push | yalnızca çakışma olmadığından eminseniz |
| git push --delete | uzak dalı silme | dal birleştirmeden sonra temizlik |
Uzak depoları anlamak, doğru push'un anahtarıdır. Genellikle origin, varsayılan uzak depo adıdır. Git remote -v komutu, uzak depoları ve URL'lerini listeler. Birden çok remote ekleyebilirsiniz (örneğin, ana depo için origin ve fork için upstream).
Temel kural: mantıksal olarak tamamlanmış her çalışma aşamasından sonra push yapın. Bir geliştirici bir görevi veya bir kısmını tamamladıysa — push zamanı gelmiştir. Ancak, derlemeyi bozan tamamlanmamış işi push'lamak önerilmez. Derlemenin bozulmaması, herhangi bir dala push yapmak için minimum gerekliliktir.
Ekip geliştirmede şu ritim benimsenir: sabah — iş arkadaşlarının değişikliklerini almak için git pull, gün içinde — birkaç commit ve bir veya iki push, akşam — tamamlanan tüm görevlerin son push'u. Geliştirici ne kadar sık push yaparsa, birleştirme çakışmaları riski o kadar düşük ve çalışma ilerlemesi o kadar şeffaf olur.
Güvenli push, ekipte veri kaybını ve çakışmaları önleyen bir dizi kuraldır. İlk ve en önemli kural: projede doğrudan dağıtım yapılandırılmamışsa, asla doğrudan main veya master dalına push yapmayın. Modern ekiplerde, main dalı koruması GitHub dal koruması düzeyinde yapılandırılır.
İkinci kural: push yapmadan önce uzak dalla senkronize olun. Birleştirme sırasında birleştirme commit'lerinden kaçınmak için git pull --rebase çalıştırın. Bu, geçmişi basitleştirir ve doğrusal hale getirir. Push reddedilirse — çıplak force push kullanmayın, önce uzak dalda hangi commit'lerin göründüğünü anlayın.
Üçüncü kural: göndermeden önce otomatik olarak testleri ve lint'leri çalıştıran pre-push hook'ları ayarlayın. Testler başarısız olursa — push engellenir. Bu hook'lar Husky veya Git hook'ları (.git/hooks içindeki pre-push dosyası) aracılığıyla yapılandırılır.
Dördüncü kural: büyük ikili dosyaları push'lamayın. Git, ikili yapıtları depolamak için tasarlanmamıştır — depoyu şişirir ve işlemleri yavaşlatır. Büyük dosyalar için Git LFS (Large File Storage) kullanın. Bir ikili dosya zaten push'lanmış ve geçmişteyse, git filter-branch ile kaldırılmalıdır.
Push başarısızlığının en yaygın nedeni, uzak dalın yerel olarak bulunmayan commit'ler içermesidir. Bu, başka bir geliştiricinin aynı dala değişikliklerini push'laması durumunda olur. Çözüm: git pull çalıştırın, çakışmaları çözün ve tekrar push yapın.
# Push reddedildi — önce fetch ve rebase yapın
git fetch origin
git rebase origin/main
# Çakışmaları çözün, ardından:
git push --force-with-lease
# Veya uzak değişiklikleri birleştirin
git pull origin main
git push
İkinci neden — dala yazma izinlerinin olmaması. Main dalı dal koruma kurallarıyla korunuyorsa, doğrudan push'lar yasaktır. Çözüm: bir özellik dalına push yapın ve bir Pull Request oluşturun. Koruma ayarları genellikle GitHub ayarları veya GitLab korumalı dalları aracılığıyla yönetilir.
Üçüncü neden — kimlik doğrulama sorunları. Eski kimlik bilgileri, SSH'ye geçiş veya kişisel erişim belirtecinin değişmesi. Çözüm: uzak URL'yi (git remote -v) kontrol edin ve kimlik bilgilerini güncelleyin. 2021'den beri GitHub, HTTPS için parola kimlik doğrulamasını kaldırdı — kişisel bir belirteç veya SSH anahtarı kullanın.
Sıkça Sorulan Sorular
Push yapmak, geliştiricinin deposundaki yerel commit'leri uzak bir sunucuya (GitHub, GitLab) göndermek anlamına gelir. Push'tan sonra değişiklikler ekip tarafından kullanılabilir, Pull Request'lerde görünür ve dağıtılabilir. Push, ekip işbirliğinden önce yerel kod çalışmasının son aşamasıdır.
Commit, değişiklikleri yerel olarak, geliştiricinin deposunda kaydeder. Push, bu yerel commit'leri uzak bir sunucuya gönderir. Push yapmadan birçok commit yapabilirsiniz, ancak iş arkadaşlarının değişiklikleri görmesi için push yapmanız gerekir. Commit kaydetmek, push yayınlamaktır.
Uzak dal, yerel olarak bulunmayan commit'ler içeriyorsa push reddedilir. Çözüm: git pull (veya git fetch + git rebase) çalıştırın, değişiklikleri birleştirin ve tekrar push yapın. Kendi özellik dalınızda çalışıyorsanız ve değişikliklerden eminseniz, git push --force-with-lease kullanın.
Evet, ancak dikkatli olun. Git revert <commit-hash> kullanın — değişiklikleri geri alan bir commit oluşturur. Ardından yeni commit'i push'layın. Geçmişten commit'leri kaldırmanız gerekiyorsa, git reset + git push --force-with-lease kullanın, ancak yalnızca kendi özellik dalınızda. git revert, ortak dallar için güvenli seçimdir.
Düzenli push, yerel makine arızasından kaynaklanan veri kaybını önler, birleştirme çakışmalarını azaltır ve ekibe ilerleme hakkında görünürlük sağlar. Bir geliştirici bir hafta push yapmazsa, değişiklikleri main dalından önemli ölçüde sapabilir ve birleştirme sırasında karmaşık çakışmalara yol açabilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun