-
1. Başlangıç
- 1.1 Sürüm Denetimi
- 1.2 Git’in Kısa Tarihçesi
- 1.3 Git Nedir?
- 1.4 Komut Satırı
- 1.5 Git’i Yüklemek
- 1.6 Git’i İlk Defa Kurmak
- 1.7 Yardım Almak
- 1.8 Özet
-
2. Git Temelleri
-
3. Git Dalları
- 3.1 Dallar
- 3.2 Kısaca Dallandırma ve Birleştirme Temelleri
- 3.3 Dal Yönetimi
- 3.4 İş Akışı Dallandırması
- 3.5 Uzak Dallar
- 3.6 Yeniden Temelleme (rebase)
- 3.7 Özet
-
4. Bir Sunucuda Git Kurma
- 4.1 İletişim Kuralları (Protocols)
- 4.2 Bir Sunucuda Git Kurma
- 4.3 SSH Ortak Anahtarınızı Oluşturma
- 4.4 Sunucu Kurma
- 4.5 Git Cini (Daemon)
- 4.6 Akıllı HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Üçüncü Taraf Barındırma (Hosting) Seçenekleri
- 4.10 Özet
-
5. Dağıtık Git
- 5.1 Dağıtık İş Akışları
- 5.2 Projenin Gelişiminde Rol Almak
- 5.3 Bir Projeyi Yürütme
- 5.4 Özet
-
6. GitHub
- 6.1 Bir Projeye Katkıda Bulunmak
- 6.2 Proje Bakımı
- 6.3 Kurumsal Yönetim
- 6.4 GitHub’ı otomatikleştirme
- 6.5 Özet
-
7. Git Araçları
- 7.1 Düzeltme Seçimi
- 7.2 Etkileşimli İzlemleme (Staging)
- 7.3 Saklama ve Silme
- 7.4 Çalışmanızı İmzalama
- 7.5 Arama
- 7.6 Geçmişi Yeniden Yazma
- 7.7 Reset Komutunun Gizemleri
- 7.8 İleri Seviye Birleştirme
- 7.9 Rerere
- 7.10 Git’le Hata Ayıklama
- 7.11 Alt Modüller
- 7.12 Demetleme (Bundling)
- 7.13 Git Nesnesini Değiştirme
- 7.14 Kimlik Bilgisi Depolama
- 7.15 Özet
-
8. Git’i Özelleştirmek
- 8.1 Git Yapılandırması
- 8.2 Git Nitelikleri
- 8.3 Git Kancaları (Hooks)
- 8.4 Bir Örnek: Mecburi Git Politikası
- 8.5 Özet
-
9. Git ve Diğer Sistemler
- 9.1 İstemci Olarak Git
- 9.2 Git’e Geçiş
- 9.3 Özet
-
10. Dahili Git Ögeleri
- 10.1 Tesisat ve Döşeme (Plumbing ve Porcelain)
- 10.2 Git Nesneleri
- 10.3 Git Referansları
- 10.4 Packfiles
- 10.5 Refspec
- 10.6 Transfer Protokolleri
- 10.7 Bakım ve Veri Kurtarma
- 10.8 Ortam Değişkenleri
- 10.9 Özet
-
A1. Ek bölüm A: Diğer Ortamlarda Git
- A1.1 Görsel Arayüzler
- A1.2 Visual Studio ile Git
- A1.3 Visual Studio Code ile Git
- A1.4 Eclipse ile Git
- A1.5 Sublime Text ile Git
- A1.6 Bash ile Git
- A1.7 Zsh ile Git
- A1.8 PowerShell ile Git
- A1.9 Özet
-
A2. Ek bölüm B: Git’i Uygulamalarınıza Gömmek
- A2.1 Git Komut Satırı
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Ek bölüm C: Git Komutları
- A3.1 Kurulum ve Yapılandırma Komutları
- A3.2 Proje Oluşturma Komutları
- A3.3 Kısaca Poz (Snapshot) Alma
- A3.4 Dallandırma ve Birleştirme Komutları
- A3.5 Projeleri Paylaşma ve Güncelleme Komutları
- A3.6 İnceleme ve Karşılaştırma Komutları
- A3.7 Hata Ayıklama (Debugging) Komutları
- A3.8 Yamalama (Patching)
- A3.9 E-Posta Komutları
- A3.10 Harici Sistemler
- A3.11 Yönetim
- A3.12 Tesisat (Plumbing) Komutları
2.4 Git Temelleri - Değişiklikleri Geri Alma
Değişiklikleri Geri Alma
Herhangi bir aşamada bir şeyi geri almak isteyebilirsiniz. Burada, yaptığınız değişiklikleri geri almak için kullanabileceğiniz birkaç temel aracı inceleyeceğiz. Bu geri alma işlemlerinin bazılarını her istediğinizde iptal ederek (bu geri alma işlemi öncesi) eski duruma geri "dönemeyebileceğiniz" için, dikkatli olmalısınız. Bu, Git’te yanlış yaparsanız bazı çalışmalarınızı kaybedebileceğiniz birkaç özel durumdan biridir.
Yaygın geri alma ihtiyaçlarından biri, bazı dosyaları eklemeyi unuttup katkınızı çok erken işlediğinizde veya yanlış bir katkı mesajı yazdığınızda ortaya çıkar.
Bir katkıyı yeniden işlemek istiyorsanız, unuttuğunuz ek değişiklikleri yapın, bunları izlem alın ve --amend
seçeneğini kullanarak yeniden katkılayın:
$ git commit --amend
Bu komut izlem alanınızı alır ve katkılamak için kullanır. Son katkınızdan beri hiçbir değişiklik yapmadıysanız (örneğin, bu komutu en son katkınızdan hemen sonra çalıştırdıysanız), pozunuz tamamen aynı olacak ve değiştireceğiniz tek şey katkı mesajınız olacaktır.
Bunu yaptığınızda aynı "katkı mesajı düzenleyicisi" aynı katkı mesajıyla devreye girer. Mesajı her zamanki gibi düzenleyebilirsiniz, ancak bu sefer önceki katkı mesajınızın üzerine yazılır.
Örnek olarak, katkı yapar ve daha sonra bu işleme eklemek istediğiniz dosyadaki değişiklikleri izleme almayı unuttuğunuzu fark ederseniz, şunun gibi bir şey yapabilirsiniz:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
Bu işlemin sonucunda, ikinci katkınızın ilk katkınızın yerini aldığı tek bir katkı elde edersiniz.
Not
|
Şunu anlamanız özellikle önemli: Eğer (amend komutuyla) son katkınızı onarırsanız; aslında son katkınızı düzeltmekten ziyade, eski katkınızı ortadan kaldırıp, onun yerine yeni bir katkı işlemektesiniz. Sanki önceki katkı hiç gerçekleşmemiş ve repo geçmişinizde görünmeyecekmiş gibi. Önceki katkıları değiştirmenin asıl önemi, repo geçmişinizi ``Hata, bir dosya eklemeyi unuttum`` veya ``Lanet olsun, son işlemdeki bir yazım hatasını düzelttim`` şeklinde gereksiz katkı mesajlarıyla doldurmadan, son işleminizde küçük iyileştirmeler yapmaktır. |
İzleme Alınmış Dosyayı izlemden Çıkarmak
Sonraki iki bölümde izlem alanınız ve çalışma dizini değişiklikleriyle nasıl çalışılacağı gösterilmektedir.
İşin güzel yanı, bu iki alanın durumunu tanımlamak için kullandığımız komutun aynı zamanda bu alanlarda yapılan değişiklikleri nasıl geri alacağımızı da bize söylemesidir.
Örneğin, iki dosyayı değiştirdiğinizi ve bunları iki ayrı değişiklik olarak işlemek istediğinizi, ama yanlışlıkla git add *
yazıp ikisini birden izleme aldığınızı varsayalım.
İkisinden sadece birini nasıl izlemden çıkarabilirsiniz?
git status
komutu size bunu nasıl yapacağınızı zaten hatırlatmaktadır:
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
``Changes to be committed`` metninin hemen altında, düzenlemeyi kaldırmak için git reset HEAD <file>...
kullanın yazıyor.
O halde, CONTRIBUTING.md
dosyasını aşamadan çıkarmak için bu yönergeyi kullanalım:
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Komut biraz garip ama neticede işe yarıyor.
CONTRIBUTING.md
dosyası değiştirildi ancak nihai durumda "stage"de (izlemde) değil.
Not
|
|
Şimdilik bu sihirli çağrı, git reset
komutu hakkında bilmeniz gereken tek şeydir.
Reset Komutunun Gizemleri bölümünde reset
'in ne yaptığı ve çok daha ilginç şeyler yapmak için bunda nasıl ustalaşılacağı hakkında çok daha fazla ayrıntıya gireceğiz.
Değiştirilmiş Dosyadaki Değişikliği Geri Alma
CONTRIBUTING.md
dosyasındaki değişikliklerinizi saklamak istemediğinizi fark ederseniz ne yaparsınız?
Yaptığınız değişiklikleri kolayca nasıl kaldırabilirsiniz veya en son katkınızdaki (veya başlangıçta kopyaladığınız ya da çalışma dizininize soktuğunuz) haline nasıl geri döndürebilirsiniz?
Neyse ki, git status
size bunu nasıl yapacağınızı da söyler.
Son örnek çıktıda, "unstaged" alan şuna benzer:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Yaptığınız değişiklikleri nasıl iptal edeceğiniz oldukça açık bir şekilde anlatmaktadır. Hadi söyleneni yapalım:
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Değişikliklerin geri alındığını görebilirsiniz.
Önemli
|
|
Bu dosyada yaptığınız değişiklikleri korumak istiyorsanız ancak şimdilik yine de ondan kurtulmanız gerekiyorsa, Git Dalları bölümünde saklama ve dallandırma işlemlerini ele alacağız. Bu işi yapmanın genellikle daha kullanışlı yolları olduğunu göreceksiniz.
Git’te committed durumda olan her şeyin neredeyse her zaman kurtarılabileceğini unutmayın.
Hatta silinen dallardaki katkılar veya --amend
komutuyla üzerini yeniden yazılan katkılar bile kurtarılabilir. (veri kurtarma için bkz. <ch10-git-internals#_data_recovery>>).
Ancak, hiç katkı olarak işlemediğiniz bir şeyi tamamen kaybetmeniz de oldukça muhtemeldir.