{"id":25949702,"url":"https://github.com/eraycann/git-ve-github-notlari","last_synced_at":"2025-08-24T15:10:53.794Z","repository":{"id":280486962,"uuid":"942160382","full_name":"Eraycann/Git-ve-GitHub-Notlari","owner":"Eraycann","description":"🚀 Git ve GitHub'ın temel kavramlarından ileri düzey kullanımına kadar hazırlamış olduğum notlarım. Komut referansları, iş akışları, senaryolar ve görsel rehberler içerir.","archived":false,"fork":false,"pushed_at":"2025-03-03T17:11:03.000Z","size":13107,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T18:25:05.945Z","etag":null,"topics":["git","git-tutorial","github"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Eraycann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-03T17:08:23.000Z","updated_at":"2025-03-03T17:13:48.000Z","dependencies_parsed_at":"2025-03-03T18:35:12.289Z","dependency_job_id":null,"html_url":"https://github.com/Eraycann/Git-ve-GitHub-Notlari","commit_stats":null,"previous_names":["eraycann/git-ve-github-kapsamli-turkce-rehber"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eraycann%2FGit-ve-GitHub-Notlari","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eraycann%2FGit-ve-GitHub-Notlari/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eraycann%2FGit-ve-GitHub-Notlari/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eraycann%2FGit-ve-GitHub-Notlari/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Eraycann","download_url":"https://codeload.github.com/Eraycann/Git-ve-GitHub-Notlari/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241847297,"owners_count":20030226,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","git-tutorial","github"],"created_at":"2025-03-04T12:28:46.516Z","updated_at":"2025-03-04T12:28:47.124Z","avatar_url":"https://github.com/Eraycann.png","language":null,"readme":"# Git ve GitHub Kullanım Rehberi\r\n\r\n## Giriş\r\n\r\n### Git Nedir?\r\n- Dağıtık versiyon kontrol sistemi\r\n- Kaynak kod yönetimi\r\n- Takım çalışması için temel araç\r\n\r\n### GitHub Nedir?\r\n- Git tabanlı bulut platformu\r\n- Kod paylaşım ve işbirliği merkezi\r\n- Proje yönetim araçları\r\n\r\n### Neden Git ve GitHub?\r\n- Versiyon kontrolü\r\n- Kod takibi\r\n- Ekip çalışması\r\n- Açık kaynak katkısı\r\n\r\nBu rehber, Git ve GitHub'ın temel ve ileri düzey kullanımını kapsar. Git, versiyon kontrol sistemi olarak kullanılırken, GitHub, Git projelerini depolamak ve paylaşmak için bir platformdur.\r\n\r\n## Git Temel Kavramlar\r\n### Git Çalışma Alanları\r\n1. Working Directory (Çalışma Dizini)\r\n   - Aktif olarak üzerinde çalışılan dosyalar\r\n   - Henüz Git tarafından izlenmeyen değişiklikler\r\n\r\n2. Staging Area (Hazırlık Alanı)\r\n   - `git add` ile eklenen dosyalar\r\n   - Commit için hazırlanan değişiklikler\r\n\r\n3. Repository (Depo)\r\n   - `git commit` ile kaydedilen değişiklikler\r\n   - Projenin tüm versiyonları\r\n\r\n### Git Durumları\r\n- Untracked: Git tarafından izlenmeyen dosyalar\r\n- Modified: Değiştirilmiş ama henüz stage edilmemiş\r\n- Staged: Commit için hazır\r\n- Committed: Local repository'de kayıtlı\r\n\r\n## Temel Git Komutları\r\n\r\n### Dosya ve Klasör İşlemleri\r\n- `ls`: Bulunduğunuz dizindeki dosya ve klasörleri listeler.\r\n- `pwd`: Bulunduğunuz dizinin tam yolunu gösterir.\r\n- `cd \u003cdosyaadı\u003e`: Belirtilen dizine girer.\r\n- `mkdir \u003cklasöradi\u003e`: Yeni bir klasör oluşturur.\r\n- `touch \u003cdosyaadı\u003e`: Yeni bir dosya oluşturur.\r\n- `rm \u003cdosyaadı\u003e`: Belirtilen dosyayı siler.\r\n- `rm -rf \u003cklasöradi\u003e`: Belirtilen klasörü ve içindekileri siler.\r\n\r\n\r\n\r\n### Git Konfigürasyonu\r\n- `git config --global user.name \"Kullanıcı Adı\"`: Git kullanıcı adınızı ayarlar.\r\n- `git config user.name`: Mevcut Git kullanıcı adını gösterir.\r\n- `git config --global user.email \"email@example.com\"`: Git email adresinizi ayarlar.\r\n- `git config user.email`: Mevcut Git email adresini gösterir.\r\n\r\n\r\n### Git Temel Komutları\r\n\r\n- `git init`: Mevcut dizini bir Git deposu olarak başlatır.\r\n- `git status`: Git deposunun mevcut durumunu gösterir.\r\n- `git add \u003cdosyaadı\u003e`: Belirtilen dosyayı staging alanına ekler.\r\n- `git add .`: Tüm değişiklikleri staging alanına ekler.\r\n- `git commit -m \"Mesaj\"`: Staging alanındaki değişiklikleri commitler.\r\n- `git log`: Commit geçmişini gösterir.\r\n\r\n### Branch İşlemleri\r\n- `git branch`: Mevcut branch'leri listeler.\r\n- `git branch \u003cbranchadı\u003e`: Yeni bir branch oluşturur.\r\n- `git switch \u003cbranchadı\u003e`: Belirtilen branch'e geçer.\r\n- `git merge \u003cbranchadı\u003e`: Belirtilen branch'i mevcut branch ile birleştirir.\r\n\r\n### Git Stash\r\n- `git stash`: Değişiklikleri geçici olarak saklar.\r\n- `git stash pop`: En son saklanan değişiklikleri geri yükler.\r\n- `git stash list`: Saklanan değişiklikleri listeler.\r\n- `git stash apply stash@{0}`: Belirli bir saklanan değişikliği geri yükler.\r\n- `git stash clear`: Tüm saklanan değişiklikleri siler.\r\n\r\n### Git Reset ve Revert\r\n- `git reset \u003chash\u003e`: Belirtilen commit'e kadar olan commit'leri siler, ancak dosyaları etkilemez.\r\n- `git reset --hard \u003chash\u003e`: Belirtilen commit'e kadar olan commit'leri ve dosyaları siler.\r\n- `git revert \u003chash\u003e`: Belirtilen commit'i geri alır ve yeni bir commit oluşturur.\r\n\r\n### 3.2. Branch Birleştirme (Merge) Stratejileri\r\n\r\nGit'te farklı branch'leri birleştirirken kullanabileceğimiz çeşitli stratejiler vardır. Her strateji farklı senaryolar için uygundur:\r\n\r\n#### Fast-forward (Hızlı İleri)\r\n- En basit ve otomatik strateji\r\n- Ana branch'te hiç değişiklik yokken kullanılır\r\n- Yeni commit oluşturmaz, sadece branch pointer'ını ilerletir\r\n```bash\r\n# Fast-forward merge örneği\r\ngit merge feature\r\n```\r\n\r\n#### Recursive (Özyinelemeli)\r\n- En yaygın kullanılan strateji\r\n- Her iki branch'te de değişiklik olduğunda kullanılır\r\n- Yeni bir \"merge commit\" oluşturur\r\n```bash\r\n# Recursive merge örneği (no-ff ile zorlanabilir)\r\ngit merge --no-ff feature\r\n```\r\n\r\n#### Octopus (Ahtapot)\r\n- İkiden fazla branch'i aynı anda birleştirir\r\n- Büyük özellikleri birleştirirken kullanışlı\r\n```bash\r\n# Octopus merge örneği\r\ngit merge feature1 feature2 feature3\r\n```\r\n\r\n#### Ours (Bizimki)\r\n- Çakışmaları otomatik çözer\r\n- Current branch'in içeriğini korur\r\n- Diğer branch'in değişikliklerini yok sayar\r\n```bash\r\n# Ours stratejisi örneği\r\ngit merge -s ours feature\r\n```\r\n\r\n#### Subtree (Alt Ağaç)\r\n- Bir projeyi başka bir projenin alt dizini olarak birleştirir\r\n- Modüler projeler için kullanışlı\r\n```bash\r\n# Subtree merge örneği\r\ngit merge -s subtree --prefix=lib feature\r\n```\r\n\r\n#### Ne Zaman Hangi Strateji?\r\n1. **Fast-forward**: Basit feature branch'lerini birleştirirken\r\n2. **Recursive**: Ekip çalışmalarında, paralel geliştirmelerde\r\n3. **Octopus**: Çoklu feature branch'lerini tek seferde birleştirirken\r\n4. **Ours**: Eski branch'leri arşivlerken veya çakışmaları hızlıca çözerken\r\n5. **Subtree**: Alt projeler veya kütüphaneler eklerken\r\n\r\n## Uzak Repository İşlemleri\r\n### Remote Bağlantıları\r\n```bash\r\n# Remote ekleme\r\ngit remote add origin \u003curl\u003e\r\n\r\n# Remote listeleme\r\ngit remote -v\r\n\r\n# Remote silme\r\ngit remote remove \u003cname\u003e\r\n```\r\n\r\n\r\n### Push/Pull İşlemleri\r\n```bash\r\n# Değişiklikleri gönderme\r\ngit push origin \u003cbranch\u003e\r\n\r\n# Değişiklikleri alma\r\ngit pull origin \u003cbranch\u003e\r\n\r\n# Remote değişiklikleri kontrol\r\ngit fetch origin\r\n```\r\n\r\n\r\n### Git Diff\r\n- `git diff`: Staging alanına eklenmemiş değişiklikleri gösterir.\r\n- `git diff HEAD`: Son commit ile mevcut değişiklikler arasındaki farkı gösterir.\r\n- `git diff \u003chash1\u003e \u003chash2\u003e`: İki commit arasındaki farkı gösterir.\r\n- `git diff \u003cbranch1\u003e \u003cbranch2\u003e`: İki branch arasındaki farkı gösterir.\r\n\r\n### Önemli Notlar\r\n- Private repository'lerde push için yetki gerekir\r\n- Conflict durumlarında manuel müdahale gerekebilir\r\n- Branch isimlendirmelerinde anlamlı isimler kullanılmalı (örn: feature/login)\r\n- Commit mesajları açıklayıcı olmalı\r\n- Düzenli commit ve push yapılması önerilir\r\n\r\n## GitHub İşlemleri\r\n\r\n## GitHub İş Akışı (Workflow)\r\n\r\n### 1. Temel İş Akışı\r\n1. **Ana Branch (main)**\r\n   - Çalışan kodu içerir\r\n   - Direkt değişiklik yapılmaz\r\n   - Her zaman stabil olmalı\r\n\r\n2. **Geliştirme Süreci**\r\n   ```bash\r\n   # 1. Yeni branch oluştur\r\n   git switch -c feature/yeni-ozellik\r\n\r\n   # 2. Değişiklikleri yap ve kaydet\r\n   git add .\r\n   git commit -m \"feat: Yeni özellik eklendi\"\r\n\r\n   # 3. GitHub'a gönder\r\n   git push origin feature/yeni-ozellik\r\n   ```\r\n\r\n3. **Pull Request Süreci**\r\n   - GitHub'da PR oluştur\r\n   - Kod incelemesi iste\r\n   - Testlerin geçmesini bekle\r\n   - Onay sonrası birleştir\r\n\r\n### 2. Örnek Senaryolar\r\n\r\n#### Yeni Özellik Geliştirme\r\n```bash\r\n# 1. Ana branch'i güncelle\r\ngit switch main\r\ngit pull\r\n\r\n# 2. Yeni branch oluştur\r\ngit switch -c feature/login\r\n\r\n# 3. Geliştirme yap ve kaydet\r\ngit add .\r\ngit commit -m \"Login sayfası eklendi\"\r\n\r\n# 4. GitHub'a gönder\r\ngit push origin feature/login\r\n```\r\n\r\n#### Hata Düzeltme\r\n```bash\r\n# 1. Hata düzeltme branch'i\r\ngit switch -c fix/login-hatasi\r\n\r\n# 2. Düzeltme yap ve kaydet\r\ngit commit -m \"fix: Login hatası düzeltildi\"\r\n\r\n# 3. GitHub'a gönder\r\ngit push origin fix/login-hatasi\r\n```\r\n\r\n### 3. GitHub Actions Basit Örnekler\r\n\r\n#### Otomatik Test\r\n```yaml\r\nname: Test\r\non: [push]\r\njobs:\r\n  test:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n      - name: Run Tests\r\n        run: npm test\r\n```\r\n\r\n#### Otomatik Deploy\r\n```yaml\r\nname: Deploy\r\non:\r\n  push:\r\n    branches: [main]\r\njobs:\r\n  deploy:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - name: Deploy\r\n        run: npm run deploy\r\n```\r\n\r\n### 4. Proje Yönetimi İpuçları\r\n\r\n#### Etkili Issue Kullanımı\r\n- Başlık açıklayıcı olmalı\r\n- Detaylı açıklama ekle\r\n- Etiketleri kullan (bug, feature vb.)\r\n- İlgili kişileri etiketle\r\n\r\n#### Pull Request Best Practices\r\n- Küçük ve odaklı değişiklikler\r\n- Açıklayıcı başlık ve açıklama\r\n- Ekran görüntüleri ekle\r\n- Test sonuçlarını belirt\r\n\r\n\r\n### GitHub Repo Oluşturma ve Yönetme\r\n- `git remote add origin \u003cURL\u003e`: GitHub deposunu yerel depoya bağlar.\r\n- `git push -u origin \u003cbranchadı\u003e`: Yerel branch'i GitHub'a yükler.\r\n- `git push origin \u003cbranchadı\u003e`: Belirtilen branch'i GitHub'a yükler.\r\n- `git fetch origin \u003cbranchadı\u003e`: GitHub'daki değişiklikleri yerel depoya getirir.\r\n- `git pull origin \u003cbranchadı\u003e`: GitHub'daki değişiklikleri yerel depoya getirir ve birleştirir.\r\n- `git clone \u003cURL\u003e`: GitHub deposunu yerel bilgisayara klonlar.\r\n\r\n\r\n\r\n## Conflict (Çakışma) Yönetimi\r\n\r\n### 1. Conflict Nedir?\r\n- Aynı dosyanın aynı kısmında farklı değişiklikler olduğunda ortaya çıkar\r\n- Git otomatik birleştirme yapamaz\r\n- Manuel müdahale gerektirir\r\n\r\n### 2. Conflict Çözme Adımları\r\n```bash\r\n# 1. Güncel main branch'i al\r\ngit switch main\r\ngit pull\r\n\r\n# 2. Feature branch'ini main ile güncelle\r\ngit switch feature/login\r\ngit merge main\r\n\r\n# 3. Conflict durumunda dosyaları düzenle\r\n# Conflict işaretleri:\r\n\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD\r\nşu anki branch'teki kod\r\n=======\r\ndiğer branch'teki kod\r\n\u003e\u003e\u003e\u003e\u003e\u003e\u003e main\r\n\r\n# 4. Çözülen conflict'leri kaydet\r\ngit add .\r\ngit commit -m \"fix: Login conflict çözüldü\"\r\n```\r\n\r\n### 3. Conflict Önleme Yöntemleri\r\n- Sık sık main branch ile senkronize ol\r\n- Küçük ve odaklı değişiklikler yap\r\n- Takım içi iletişimi güçlü tut\r\n- Branch isimlendirmelerini standart yap\r\n\r\n### 4. IDE Conflict Çözüm Araçları\r\n- VS Code: Built-in merge editor\r\n- IntelliJ: Visual merge tool\r\n- SourceTree: Built-in conflict resolver\r\n\r\n### 5. Örnek Conflict Senaryosu\r\n```bash\r\n# Senaryo: İki geliştirici aynı dosyayı değiştirdi\r\n\r\n# Geliştirici 1:\r\ngit switch -c feature/login-tasarim\r\n# login.css değişiklikleri\r\ngit commit -m \"Login sayfası tasarımı güncellendi\"\r\ngit push origin feature/login-tasarim\r\n\r\n# Geliştirici 2:\r\ngit switch -c feature/login-responsive\r\n# login.css değişiklikleri\r\ngit commit -m \"Login sayfası responsive yapıldı\"\r\ngit push origin feature/login-responsive\r\n\r\n# Conflict Çözümü:\r\ngit switch feature/login-responsive\r\ngit merge feature/login-tasarim\r\n# Conflict çözme editörü açılır\r\n# Değişiklikleri manuel birleştir\r\ngit add .\r\ngit commit -m \"merge: Login tasarım ve responsive birleştirildi\"\r\n```\r\n\r\n\r\n## GitHub Özellikleri\r\n\r\n### 1. Issues (Sorunlar)\r\nIssues, projenizde karşılaşılan sorunları, yapılacak işleri ve özellik isteklerini yönetmenizi sağlar:\r\n- **Sorun Takibi**: Bug'ları ve hataları raporlama\r\n- **Görev Yönetimi**: Yapılacak işleri listeleme ve atama\r\n- **Özellik İstekleri**: Yeni özellik önerilerini toplama\r\n- **Etiketleme**: `bug`, `feature`, `documentation` gibi etiketlerle organize etme\r\n\r\n### 2. Pull Requests (PR)\r\nKod değişikliklerini gözden geçirme ve birleştirme sürecini yönetir:\r\n- **Kod İnceleme**: Değişiklikleri inceleme ve yorum yapma\r\n- **Otomatik Kontroller**: Testlerin ve kontrollerin otomatik çalıştırılması\r\n- **Branch Birleştirme**: Onaylanan değişiklikleri ana branch'e alma\r\n- **Code Review**: Ekip üyelerinin kodu incelemesi ve onaylaması\r\n\r\n### 3. Actions (Otomatizasyon)\r\nGitHub Actions, iş akışlarını otomatize etmenizi sağlar:\r\n```yaml\r\n# Örnek GitHub Action\r\nname: Test ve Deploy\r\non: [push]\r\njobs:\r\n  test:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - name: Testleri Çalıştır\r\n        run: npm test\r\n  deploy:\r\n    needs: test\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - name: Deploy\r\n        run: npm run deploy\r\n```\r\n- **CI/CD**: Sürekli entegrasyon ve dağıtım\r\n- **Otomatik Testler**: Her push'ta testlerin çalıştırılması\r\n- **Deployment**: Başarılı testler sonrası otomatik dağıtım\r\n\r\n### 4. Projects (Proje Yönetimi)\r\nProje yönetimi için kapsamlı araçlar sunar:\r\n- **Kanban Boardları**: \r\n  - To Do (Yapılacak)\r\n  - In Progress (Devam Eden)\r\n  - Done (Tamamlanan)\r\n- **Milestone Takibi**: \r\n  - Sürüm planlaması\r\n  - İlerleme takibi\r\n  - Deadline yönetimi\r\n- **Otomatizasyon**: \r\n  - Issue'ların otomatik atanması\r\n  - PR'ların otomatik bağlanması\r\n  - Durum güncellemeleri\r\n\r\n### Örnek Kullanım Senaryosu:\r\n1. Yeni bir özellik için **Issue** oluşturulur\r\n2. Issue için bir **Branch** açılır\r\n3. Geliştirme yapılır ve **Pull Request** açılır\r\n4. **GitHub Actions** testleri çalıştırır\r\n5. Kod review yapılır ve onaylanır\r\n6. **Projects** board'unda ilerleme takip edilir\r\n7. **Milestone**'a eklenir ve deadline belirlenir\r\n\r\n### Pull Request ve Fork\r\n- **Pull Request**: GitHub'da bir branch'de yapılan değişiklikleri ana branch ile birleştirmek için istek gönderme.\r\n- **Fork**: Bir GitHub deposunu kendi hesabınıza kopyalama.\r\n\r\n### GitHub Özellikleri\r\n- **Actions**: DevOps işlemleri için otomatik iş akışları oluşturma.\r\n- **Projects**: Proje yönetimi için araçlar.\r\n- **README.md**: Proje hakkında bilgi içeren markdown dosyası.\r\n\r\n## İleri Düzey Git Komutları\r\n\r\n### Git Rebase\r\n- `git rebase \u003cbranchadı\u003e`: Mevcut branch'i belirtilen branch üzerine yeniden dizerek merge commit'lerini temizler.\r\n\r\n### Git Checkout\r\n- `git checkout \u003chash\u003e`: Belirtilen commit'e geçer.\r\n- `git checkout origin/\u003cbranchadı\u003e`: GitHub'daki bir branch'e geçer.\r\n\r\n### Git Remote\r\n- `git remote`: Bağlı uzak depoları listeler.\r\n\r\n## Örnek Kullanım Senaryoları\r\n\r\n### Yeni Bir Proje Oluşturma ve GitHub'a Yükleme\r\n1. Yerel dizinde `git init` komutu ile yeni bir Git deposu oluşturun.\r\n2. Dosyaları oluşturun ve `git add .` ile staging alanına ekleyin.\r\n3. `git commit -m \"İlk commit\"` ile değişiklikleri commitleyin.\r\n4. GitHub'da yeni bir repo oluşturun ve URL'sini alın.\r\n5. `git remote add origin \u003cURL\u003e` ile GitHub deposunu yerel depoya bağlayın.\r\n6. `git push -u origin main` ile yerel depoyu GitHub'a yükleyin.\r\n\r\n### Branch Oluşturma ve Birleştirme\r\n1. `git branch feature` ile yeni bir branch oluşturun.\r\n2. `git switch feature` ile yeni branch'e geçin.\r\n3. Değişiklikleri yapın ve `git commit -m \"Yeni özellik\"` ile commitleyin.\r\n4. `git switch main` ile ana branch'e geçin.\r\n5. `git merge feature` ile feature branch'ini ana branch ile birleştirin.\r\n\r\n### GitHub'dan Proje Klonlama ve Değişiklik Yapma\r\n1. `git clone \u003cURL\u003e` ile GitHub deposunu yerel bilgisayara klonlayın.\r\n2. Yeni bir branch oluşturun ve değişiklikleri yapın.\r\n3. Değişiklikleri commitleyin ve `git push origin \u003cbranchadı\u003e` ile GitHub'a yükleyin.\r\n4. GitHub'da Pull Request oluşturarak değişiklikleri ana branch ile birleştirin.\r\n\r\n\r\n\r\n## İleri Düzey Git Kullanımı ve Senaryolar\r\n\r\n### Git Rebase ile Tarih Temizleme\r\n`git rebase`, branch'lerinizi daha temiz bir commit geçmişi ile yeniden düzenlemenizi sağlar. Özellikle uzun süren feature branch'lerinde, `merge` yerine `rebase` kullanarak commit geçmişinizi daha anlaşılır hale getirebilirsiniz.\r\n\r\n**Örnek Senaryo:**\r\n1. `git switch feature` ile feature branch'ine geçin.\r\n2. `git rebase main` komutunu çalıştırın. Bu, feature branch'inizi main branch üzerine yeniden dizerek commit geçmişini temizler.\r\n3. Eğer çakışmalar (conflict) oluşursa, çakışmaları çözün ve `git rebase --continue` ile devam edin.\r\n\r\n### Git Cherry-Pick ile Belirli Commit'leri Taşıma\r\n`git cherry-pick`, belirli bir commit'i başka bir branch'e taşımak için kullanılır. Bu, özellikle bir branch'te yapılan bir düzeltmeyi başka bir branch'e uygulamak istediğinizde kullanışlıdır.\r\n\r\n**Örnek Senaryo:**\r\n1. `git log` ile commit hash'ini bulun.\r\n2. `git switch main` ile ana branch'e geçin.\r\n3. `git cherry-pick \u003chash\u003e` komutunu çalıştırarak belirli commit'i ana branch'e taşıyın.\r\n\r\n### Git Bisect ile Hata Bulma\r\n`git bisect`, projenizdeki bir hatayı hangi commit'in tanıttığını bulmak için kullanılır. Bu, özellikle büyük projelerde hata ayıklama sürecini hızlandırır.\r\n\r\n**Örnek Senaryo:**\r\n1. `git bisect start` ile bisect modunu başlatın.\r\n2. `git bisect bad` ile mevcut commit'in hatalı olduğunu belirtin.\r\n3. `git bisect good \u003chash\u003e` ile hatanın olmadığı bir commit'i işaretleyin.\r\n4. Git, otomatik olarak commit'ler arasında gezinerek hatayı bulmanıza yardımcı olur.\r\n\r\n### Git Hooks ile Otomasyon\r\nGit hooks, belirli Git olayları (örneğin, commit, push) sırasında otomatik olarak çalıştırılacak script'lerdir. Bu, kod kalitesini artırmak veya belirli işlemleri otomatize etmek için kullanılabilir.\r\n\r\n**Örnek Senaryo:**\r\n1. `.git/hooks` dizinine gidin.\r\n2. `pre-commit` adında bir dosya oluşturun ve içine çalıştırılacak script'i yazın.\r\n3. Script'i çalıştırılabilir hale getirin (`chmod +x pre-commit`).\r\n\r\n### GitHub Actions ile CI/CD\r\nGitHub Actions, GitHub repo'larınız için sürekli entegrasyon (CI) ve sürekli dağıtım (CD) işlemlerini otomatize etmenizi sağlar. Bu, testleri otomatik olarak çalıştırmak veya kodunuzu otomatik olarak dağıtmak için kullanılabilir.\r\n\r\n**Örnek Senaryo:**\r\n1. `.github/workflows` dizinine bir YAML dosyası oluşturun.\r\n2. İş akışını tanımlayın (örneğin, her push'ta testleri çalıştırma).\r\n3. GitHub, otomatik olarak bu iş akışını çalıştıracaktır.\r\n\r\n\r\n## Sık Kullanılan Git Senaryoları\r\n\r\n### 1. Yanlış Branch'te Çalışma Yapıldığında\r\n```bash\r\n# 1. Değişiklikleri geçici kaydet\r\ngit stash\r\n\r\n# 2. Doğru branch'e geç\r\ngit switch doğru-branch\r\n\r\n# 3. Değişiklikleri geri al\r\ngit stash pop\r\n```\r\n\r\n### 2. Son Commit'i Düzeltme\r\n```bash\r\n# Commit mesajını düzeltme\r\ngit commit --amend -m \"Yeni commit mesajı\"\r\n\r\n# Son commit'e dosya ekleme\r\ngit add unutulan-dosya\r\ngit commit --amend --no-edit\r\n```\r\n\r\n### 3. Commit'leri Birleştirme\r\n```bash\r\n# Son 3 commit'i birleştirme\r\ngit rebase -i HEAD~3\r\n\r\n# Açılan editörde:\r\npick en-eski-commit\r\nsquash orta-commit\r\nsquash son-commit\r\n```\r\n\r\n### 4. Branch Temizliği\r\n```bash\r\n# Birleştirilmiş branch'leri listeleme\r\ngit branch --merged\r\n\r\n# Birleştirilmiş branch'leri silme\r\ngit branch -d birleştirilmiş-branch\r\n\r\n# Remote'dan silinmiş branch'leri temizleme\r\ngit remote prune origin\r\n```\r\n\r\n### 5. Geçici Değişiklikler\r\n```bash\r\n# Geçici değişiklikleri kaydetme\r\ngit stash save \"login bug fix\"\r\n\r\n# Belirli dosyaları stash'leme\r\ngit stash push -m \"css changes\" style.css\r\n\r\n# Stash listesini görüntüleme\r\ngit stash list\r\n\r\n# Son stash'i uygulama ve silme\r\ngit stash pop\r\n\r\n# Belirli bir stash'i uygulama\r\ngit stash apply stash@{2}\r\n```\r\n\r\n### 6. Hataları Geri Alma\r\n```bash\r\n# Stage edilmemiş değişiklikleri geri alma\r\ngit checkout -- hatalı-dosya.txt\r\n\r\n# Stage edilmiş değişiklikleri geri alma\r\ngit reset HEAD hatalı-dosya.txt\r\n\r\n# Son commit'i geri alma (değişiklikleri koru)\r\ngit reset --soft HEAD^\r\n\r\n# Son commit'i tamamen silme\r\ngit reset --hard HEAD^\r\n```\r\n\r\n### 7. Branch İşlemleri\r\n```bash\r\n# Branch oluştur ve geç\r\ngit switch -c yeni-özellik\r\n\r\n# Remote branch'i yerel branch olarak alma\r\ngit switch -c yerel-branch origin/uzak-branch\r\n\r\n# Branch'i yeniden adlandırma\r\ngit branch -m eski-isim yeni-isim\r\n\r\n# Branch'i silme (zorla)\r\ngit branch -D silinecek-branch\r\n```\r\n\r\n### 8. Commit Geçmişi İşlemleri\r\n```bash\r\n# Detaylı log görüntüleme\r\ngit log --oneline --graph --all\r\n\r\n# Belirli dosyanın geçmişini görme\r\ngit log -p dosya.txt\r\n\r\n# Belirli tarih aralığındaki commit'ler\r\ngit log --since=\"1 week ago\"\r\ngit log --before=\"2023-12-31\"\r\n\r\n# Author'a göre filtreleme\r\ngit log --author=\"kullanıcı\"\r\n```\r\n\r\n### 9. Remote İşlemleri\r\n```bash\r\n# Remote branch'leri görüntüleme\r\ngit remote show origin\r\n\r\n# Yeni remote ekleme\r\ngit remote add upstream https://github.com/orijinal/repo.git\r\n\r\n# Remote branch'i silme\r\ngit push origin --delete uzak-branch\r\n\r\n# Tüm remote branch'leri çekme\r\ngit fetch --all\r\n```\r\n\r\n### 10. Merge ve Rebase İpuçları\r\n```bash\r\n# Merge işlemini iptal etme\r\ngit merge --abort\r\n\r\n# Rebase işlemini iptal etme\r\ngit rebase --abort\r\n\r\n# Conflict sonrası devam etme\r\ngit merge --continue\r\ngit rebase --continue\r\n\r\n# Branch'i güncel tutma\r\ngit pull --rebase origin main\r\n```\r\n\r\n### 11. Dosya İşlemleri\r\n```bash\r\n# Dosyaları takipten çıkarma\r\ngit rm --cached gereksiz-dosya.txt\r\n\r\n# Dosyaları taşıma/yeniden adlandırma\r\ngit mv eski-dosya.txt yeni-dosya.txt\r\n\r\n# Belirli bir commit'teki dosyayı görüntüleme\r\ngit show commit-hash:dosya.txt\r\n\r\n# İki branch arasındaki dosya farklarını görme\r\ngit diff branch1..branch2 -- dosya.txt\r\n```\r\n\r\n### 12. Etiketleme ve Sürüm Yönetimi\r\n```bash\r\n# Lightweight tag oluşturma\r\ngit tag v1.0.0\r\n\r\n# Annotated tag oluşturma\r\ngit tag -a v1.0.0 -m \"Version 1.0.0 release\"\r\n\r\n# Tag'leri listeleme\r\ngit tag --list\r\n\r\n# Tag'i push etme\r\ngit push origin v1.0.0\r\n```\r\n\r\n## GUI Araçları ve IDE Entegrasyonu\r\n\r\n## Sonuç\r\n\r\nBu rehber, Git ve GitHub'ın temel ve ileri düzey kullanımını kapsar. GUI araçları ve IDE entegrasyonu ile Git kullanımı daha kolay hale gelirken, ileri düzey tekniklerle projelerinizi daha etkili bir şekilde yönetebilirsiniz. \r\n\r\n### GitHub Desktop\r\nGitHub Desktop, GitHub ile etkileşimde bulunmak için kullanılan bir GUI aracıdır. Bu araç, Git komutlarını kullanmadan repo'ları yönetmenizi, commit'leri oluşturmanızı ve branch'leri birleştirmenizi sağlar.\r\n\r\n![GitHub Desktop](github-desktop-screenshot.png)\r\n\r\n### Kraken\r\nKraken, Git repo'larını yönetmek için kullanılan bir diğer GUI aracıdır. Bu araç, Git komutlarını kullanmadan repo'ları yönetmenizi, commit'leri oluşturmanızı ve branch'leri birleştirmenizi sağlar.\r\n\r\n![Kraken](kraken-screenshot.png)\r\n\r\n### IDE Entegrasyonu\r\nModern IDE'ler (IntelliJ IDEA, Visual Studio Code, Eclipse vb.), Git entegrasyonu sunar. Bu entegrasyon, Git komutlarını kullanmadan repo'ları yönetmenizi, commit'leri oluşturmanızı ve branch'leri birleştirmenizi sağlar.\r\n\r\n![IDE Git Entegrasyonu](ide-git-integration-screenshot.png)\r\n\r\nBu rehber, Git ve GitHub'ın temel ve ileri düzey kullanımını kapsar. \r\n\r\nDaha fazla bilgi için [Git Resmi Dokümantasyonu](https://git-scm.com/doc) ve [GitHub Docs](https://docs.github.com/)'u ziyaret edebilirsiniz.\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feraycann%2Fgit-ve-github-notlari","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feraycann%2Fgit-ve-github-notlari","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feraycann%2Fgit-ve-github-notlari/lists"}