Bir projeniz olduğunu varsayalım: C++ ile hesap makinası yapıyorsunuz. Bu bir C++ eğitimi olmadığı için kodları minimum seviyede tutma amacıyla header vs gibi detayları yazmayacağız.
hesapmak klasöründe main.cpp dosyanızın şöyle bir içeriği olduğunu düşünün:
void main() {
printf("Hello Git!");
}
Şimdi bu uygulamanızı Git ile takip edebilmeniz için hesapmak klasöründe bir git repo'su oluşturmalısınız. Terminalinizde hesapmak klasörüne gidip bu komutu çalıştırın:
git init
Artık bu klasördeki tüm dosyalar git ile takip edilebilir haldeler. Fakat henüz takip edilmiyorlar!
Şimdi git status
komutu çalıştırın.
git main.cpp dosyamızı gördü ama Untracked yani henüz takip edilmiyor. Yani sadece çalışma alanımız (Working Directory) içerisinzde . Şimdi Git'e "Bu dosyaya takip et!" dememiz, yani Staging Area'ya almamız gerekiyor.
git add main.cpp
Tekrardan repomuzun durumuna bakalım.
Artık git bu dosyamızı takip ediyor ve bize diyor ki; Bu dosyada bazı değişiklikler var ama henüz commit edilmemiş. Hemen commit işlemini gerçekleştirelim.
git commit -m 'bu benim commit mesajım'
Tebrikler! İlk commitiniz başarıyla sonuçlandı! :) Git main.cpp
dosyanızın o anki halini kaydetti. Şimdi main.cpp
dosyanızda rastgele değişiklikler yapın. Diyelim ki bazı değişiklikler yaptınız, birşeyler denediniz ama istediğiniz sonuçları alamadınız. Kodunuz çalışmıyor, töbe yarabbi acayip acayip birşeyler oldu. TÜm değişiklikleri silip son çalışır haline yani en son commitinizdeki haline geri döndürmek istiyorsunuz. Önce bir git status
diyerek hangi dosyalarda değişiklik var, ne olmuş ne bitmiş bir bakalım.
main.cpp değiştirilmiş ama henüz commit edilmemiş. Biz bu değişiklikleri hemen geri alalım. git status
komutu bize bunu nasıl yapacağımızı da söylüyor zaten. (Ekran görüntüsü 5. satır)
git checkout -- main.cpp
Şimdi main.cpp
dosyanızı açtğınızda yaptığınız değişikliklerin gittiğini ve dosyanın son committeki haline döndüğünü göreceksiniz. Tekrar git status
diyerek kontrol edebilirsiniz. Şimdi main.cpp
'de tekrar değişiklikler yapın ve diyelim ki bu değişiklikler canavar gibi çalışıyor ve dosyanın bu halini saklamak istiyorsunuz. Tekrar git status
ile kontrol edebilirsiniz. Dosyayı yine git add main.cpp
ile commit edilecekler listesine ekliyoruz ve daha sonra commit ediyoruz.
Farkettiyseniz dosyanın sadece çalışır ve memnun olduğumuz hallerini commit ettik. Bu nokta çok önemli. Her zaman dosyalarınızın nihai, çalışır hallerini commit edin.
Dosyanızda hangi tarihte ne değişiklikler yaptığınızı merak ederseniz istediğiniz commite geri dönebilirsiniz. Bunun için önce commitlerimizi listeleyelim.
git log
Şimdi bakalım ilk committen sonra ne değişiklikler olmuş? Commitin ID'sini (Benimki 801a... diye gidiyor, sizinki farklı olacaktır.)
git diff 801a786096c84596ff13a1f86759cc99d4ef1607
Gördüğünüz gibi, ilk commitimde main.cpp
dosyası boştu ve ben daha sonra ilk satıra asdasd yazmışım.
İlk committeki haline geri dönmek istediğiniz varsayalım.
git checkout 801a786096c84596ff13a1f86759cc99d4ef1607
Artık main.cpp
ilk committeki haline döndü. Tekrar en son committeki haline geri döndürmek için aynı komutu kullanabilir ya da kısaca git checkout master
diyebilirsiniz. Aslında manası daha derin olsa da şimdilik master
'ın son commitinizi ifade ettiğini söyleyebilirim.
Editör Notu
Burada bir hatam oldu ve daha anlaşılır olsun diye commit mesajlarında "İlk mesajım." gibi ifadeler kullandım. Normalde böyle anlaşılmaz mesajlar gönderdiğinizde çalışma arkadaşlarınızdan dayak yiyebilirsiniz. Çünkü bu mesajlar çok önemli. Mesajlarda her zaman o committe ne değişiklik yaptığınızı, hangi bug'ı düzelttiğiniz yazmalısınız ki yarın öbür gün "ben hangi committe şu hatayı düzeltmiştim yahu?!" diye debelenmeyin. Birkaç commit mesajı örneği vermek gerekirse :
"Kullanıcıdan veri talep edilen fonksiyon yazıldı." "Artık scanf yerine cin kullanılıyor." "Kullanıcının sayı yerine harf girmesi engellendi." "15 nolu bug düzeltildi."