Git revert, geçmiş bir commit’i alıp onu yeni bir commit olarak eklemek istediğimizde kullandığımız komuttur. Revert işlemi, belirli bir commit’in değişikliklerini geri alır, ancak commit geçmişini değiştirmez. Yani, geri alınan commit’in tersine çevrilmiş bir versiyonu yeni bir commit olarak eklenir.
Revert işlemi için öncellikle geçmiş bir commit belirlenir.
Sonrasında geçmiş commit yeni bir commit oluşturmak için kullanılır.
Örneğin bir dosya sildiğimiz yeni bir commit oluşturalım.
git commit -a -m "Style Dosyası Silindi"[master 6ffe68d] Style Dosyası Silindi
1 file changed, 8 deletions(-)
delete mode 100644 style.css
Bu dosyanın yanlışlıkla silindiğini düşünelim ve bir önceki commit’e gitmek isteyebiliriz.
Şimdi öncelikli olarak dönmek istediğimiz commit’i bulmamız gerekiyor. Bunu yapmak için log incelemesi yapabilirsiniz. Çok uzun bir log listesi yerine sadece tek satırda log kayıtlarını okumak için –oneline anahtar kelimesini kullanabilirsiniz.
Bu komuta bize iki başlık döndürecektir.
git log --oneline
6ffe68d (HEAD -> master) Style Dosyası Silindi
381220e img eklendi
01cbde8 Ikinci bir satır eklendir
0f4fccf Yeni bir satır eklendi
c85d3e3 Ilk Projemin Ilk Takibi
Şu anda en son commit’imizin “6ffe68d (HEAD -> master) Style Dosyası Silindi
” olduğunu görüyoruz ve bir önceki commit’e “381220e img eklendi” gitmek istiyoruz.
git revert HEAD
komutu, en son yapılan commit’in değişikliklerini geri almak için kullanılır. Bu komut, en son commit’in tam tersini yapar ve bu değişiklikleri geri alır. Ancak revert komutu yeni bir commit oluşturarak bunu yaptığını unutmayalım.
Bu komutu çalıştırdığınızda, bir düzenleme ekranı açılacaktır. Bu düzenleme ekranında, commit mesajını düzenleyebilirsiniz. Varsayılan olarak, Git size bir özet sunacaktır. Bu özet, geri alma işleminin ne yaptığını ve neden yaptığını anlatır. Eğer bu özet size uygun geliyorsa, kaydedin ve çıkın. Böylece, geri alma işlemi tamamlanacak ve yeni bir commit oluşturulacaktır. Bu yeni commit, en son commit’in değişikliklerini geri almak için kullanılacaktır.
git revert HEAD --no-edit
komutu ise kullanıcıya commit mesajını düzenleme seçeneği sunmaz. Yani, --no-edit
seçeneği kullanıldığında, Git yeni bir geri alma commit’i oluştururken, otomatik olarak bir commit mesajı oluşturur ve kullanıcıya bir düzenleme ekranı sunmaz.
git revert HEAD --no-edit
[master 2d4e476] Revert "Style Dosyası Silindi"
Date: Tue Feb 27 14:19:10 2024 +0300
1 file changed, 8 insertions(+)
create mode 100644 style.css
Şimdi tekrardan log ekranımızı kontrol edelim.
git log --oneline
2d4e476 (HEAD -> master) Revert "Style Dosyası Silindi"
6ffe68d Style Dosyası Silindi
381220e img eklendi
01cbde8 Ikinci bir satır eklendir
0f4fccf Yeni bir satır eklendi
c85d3e3 Ilk Projemin Ilk Takibi
Not: Daha önceki kayıtlara geri dönmek için git revert HEAD~x’i kullanabiliriz (x bir sayıdır. geri gitmek istediğimiz commit sayısını belirtiriz. örneğin 2 iki commit geri gider gibi.)
Git reset, repoyu önceki bir işleme geri taşımak istediğimizde kullandığımız komuttur ve bu işlemden sonra yapılan değişiklikleri iptal eder.
Reset işlemi için öncellikle geçmiş bir commit belirlenir.
Ve repo belirlenen commit’ geri döner.
Şimdi öncelikli olarak dönmek istediğimiz commit’i bulmamız gerekiyor. Bunu yapmak için log incelemesi yapabilirsiniz. Çok uzun bir log listesi yerine sadece tek satırda log kayıtlarını okumak için –oneline anahtar kelimesini kullanabilirsiniz.
Bu komuta bize iki başlık döndürecektir.
git log --oneline
2d4e476 (HEAD -> master) Revert "Style Dosyası Silindi"
6ffe68d Style Dosyası Silindi
381220e img eklendi
01cbde8 Ikinci bir satır eklendir
0f4fccf Yeni bir satır eklendi
c85d3e3 Ilk Projemin Ilk Takibi
Şimdi “381220e img eklendi
” tanımlı commit’e gitmek istiyoruz.
Git reset komutunu commit hash’ı kullanarak repomuzu belirli bir işleme geri döndürebiliriz.
git reset 381220e
Şimdi log’u tekrar kontrol edelim:
git log --oneline
381220e (HEAD -> master) img eklendi
01cbde8 Ikinci bir satır eklendir
0f4fccf Yeni bir satır eklendi
c85d3e3 Ilk Projemin Ilk Takibi
git reset
komutu, HEAD işaretçisinin ve çalışma dizininin belirli bir duruma geri alınması veya değiştirilmesi için güçlü bir araçtır. Ancak, dikkatlice kullanılmalı ve geri alınan değişikliklerin kalıcı olarak silineceğini unutmamalısınız.
commit --amend
en son yapılan commit’i değiştirmek için kullanılır. Bu komut, mevcut HEAD (çalışma dizinindeki en son commit) üzerinde yapılan değişiklikleri ekler ve son commit’i değiştirir veya günceller.
Kısaca yeni bir commit oluşturmaz, en son commit’in tamamen yerini alır.
git commit --amend
komutunu kullanarak şunları yapabilirsiniz:
–amend ile yapabileceğiniz en temel işlemlerden biri commit mesajını değiştirmektir.
yeni bir commit ekleyelim.
git add .
git commit -m "yeni mesaj"
[master a20535f] yeni mesaj
Şimdi log’u tekrar kontrol edelim:
git log --oneline
a20535f (HEAD -> master) yeni mesaj
381220e img eklendi
01cbde8 Ikinci bir satır eklendir
0f4fccf Yeni bir satır eklendi
c85d3e3 Ilk Projemin Ilk Takibi
Şimdi commit mesajımızı değiştirelim.
git commit --amend -m "mesaj degistirildi"
[master 1c7a147] mesaj degistirildi
Date: Tue Feb 27 14:53:37 2024 +0300
3 files changed, 56 insertions(+)
Tekrar log’u kontrol edelim:
git log --oneline
1c7a147 (HEAD -> master) mesaj degistirildi
381220e img eklendi
01cbde8 Ikinci bir satır eklendir
0f4fccf Yeni bir satır eklendi
c85d3e3 Ilk Projemin Ilk Takibi
Bir önceki commit’in mesajının değiştiğini görebilirsiniz.
–amend ile dosya eklemek de aynı şekilde çalışır. Commit etmeden önce dosyalarımızı hazırlama ortamına eklemeniz yeterlidir.
git add dosya_adı
git commit --amend