Ana içeriğe atla

Yeni Başlayanlar için Git Reset ve Revert Eğitimi

Proje geçmişinizi yönetmek için Git reset ve revert kullanımını keşfedin. Soft, mixed ve hard reset örnekleriyle pratik yapın. İki komut arasındaki farkı öğrenin.
Güncel 3 Eki 2026  · 8 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Git, başlangıçta yazılım geliştiriciler için oluşturulmuş bir araçken, bugün kodla çalışan herkes için standart haline geldi. Günümüzde veri bilimciler, veri mühendisleri ve makine öğrenimi mühendisleri de bu en iyi uygulamaları benimsiyor.

Bu eğitimde, değişiklikleri geri almak için kullanılan iki Git komutu olan git reset ve git revert arasındaki temel farkları ele alıyorum. Bir projeyi başlatmaktan belirli commit'leri geri almaya kadar her modun pratik örneklerini adım adım gösteriyorum.

Özet

  • git reset, dal işaretçisini geriye alarak commit'leri geçmişten kaldırır. Push etmeden önce yerel temizleme için kullanın.

  • git reset --soft değişiklikleri staged halde tutar, --mixed (varsayılan) staging'den çıkarır, --hard ise hepsini tamamen atar.

  • git revert, önceki bir commit'i geri alan yeni bir commit oluşturur. Paylaşılan bir dala zaten push edilmiş değişiklikler için kullanın.

  • Paylaşılan dallarda asla git reset kullanmayın. Bir şey zaten push edildiyse yerine git revert kullanın.

  • Yanlışlıkla git reset --hard çalıştırırsanız, kaybolan commit'leri kurtarmak için git reflog'u kontrol edin.

Git nedir?

Git, 2005 yılında Linus Torvalds tarafından oluşturulmuş açık kaynaklı bir sürüm kontrol aracıdır. Başlıca kullanım amacı, proje dosyalarındaki değişiklikleri verimli bir şekilde izleyerek ekip üyelerinin tüm değişikliklerin kaydına sahip olmasını ve değerli bilgileri kaybetmeden bu değişiklikleri birleştirebilmesini sağlamaktır. Bizim

Buna ek olarak Introduction to GitHub Concepts kursu, GitHub’ın temel özelliklerini, arayüzde gezinmeyi ve günlük işbirliği görevlerini başarıyla yürütmeyi kapsar.

Git revert ve Git reset, projedeki kodu ve geçmişi geri almak için kullanılan iki komuttur, ancak bunu farklı şekillerde yaparlar. Sürece dalmadan önce bir Git projesi oluşturalım.

Bir Git projesi oluşturun

Aşağıda bir git projesi oluşturma ve bazı dosyalarla başlatma adımları yer almaktadır:

mkdir git_revert_reset
cd git_revert_reset
git init .
  • mkdir git_revert_reset, git_revert_reset adlı bir klasör oluşturur. 

  • cd git_revert_reset klasöre geçer. 

  • git init . klasörü bir git deposu olarak başlatır.

Bunu bir veri bilimi projesi olarak düşünerek, şu touch komutunu kullanarak veri toplama, veri ön işleme ve model eğitimi için aşağıdaki dosyaları oluşturabiliriz:

touch data_acquisition.py data_preprocessing.py model_training.py

Proje klasörünün son hali şu şekildedir.

git_revert_reset
      |---------- data_acquisition.py
      |---------- data_preprocessing.py
      |---------- model_training.py

Git Reset 

Diagram of Before and After Git Reset

Git Reset diyagramı (Kaynak)

git reset komutu, çalışma dizininizdeki değişiklikleri geri almak ve belirli bir commit'e dönmek için kullanılır; bu sırada ondan sonra yapılan tüm commit'ler atılır. 

Örneğin, on commit yaptığınızı düşünün. İlk commit üzerinde git reset kullanmak, diğer dokuz commit'i kaldırarak sizi ilk commit aşamasına geri götürür.

git reset kullanmadan önce yapmayı planladığınız değişikliklerin türünü göz önünde bulundurmak önemlidir; aksi takdirde faydadan çok karmaşa yaratabilirsiniz. 

git reset ile birlikte birden fazla seçenek kullanabilirsiniz, ancak başlıcaları şunlardır. Her biri belirli bir duruma göre kullanılır: git reset --soft, git reset --mixed ve git reset --hard

git reset --soft

--soft, HEAD (yerel makinenizdeki son commit'in bulunduğu yer) referansını belirli bir commit'e taşımayı amaçlar. Örneğin, bir commit'e bir dosya eklemeyi unuttuğumuzu fark edersek, aşağıdaki biçime göre --soft ile geri dönebiliriz:

  • git reset --soft HEAD~n, referansı (n) verilen commit'e geri dönmek için. git reset --soft HEAD~1 son commit'e döner.

  • git reset --soft <commit ID>, <commit ID> ile belirtilen commit'e geri döner.

Bazı örneklere bakalım.

git add data_acquisition.py data_preprocessing.py

git commit -m "added data acquisition and preprocessing scripts"

Önceki komutun sonucu şöyledir. 

[master (root-commit) faf864e] added data acquisition and preprocessing scripts
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 data_acquisition.py
create mode 100644 data_preprocessing.py

Commit durumunu aşağıdaki gibi kontrol edebiliriz:

git status

On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
model_training.py

nothing added to commit but untracked files present (use "git add" to track)

Ancak, commit'e model_training.py betiğini eklemeyi unuttuk.

Son commit HEAD'de olduğundan, aşağıdaki üç ifadeyi çalıştırarak bu sorunu düzeltebiliriz. 

  • git reset --soft HEAD~1 ile son commit'i geri alırken değişiklikleri staged halde tutun.

  • Unutulan dosyayı git add ile ekleyin. 

  • Son olarak git commit ile değişiklikleri commit'leyin.

git reset --soft HEAD~1

git add model_training.py

git commit -m "added all the python scripts"

Aşağıdaki sonuç, önceki tüm adımlardan sonra git reset'in master'a dönmesini sağladı: 

[master (root-commit) faf864e] added all the python scripts
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 data_acquisition.py
create mode 100644 data_preprocessing.py
create mode 100644 model_training.py

Soft reset'lere daha derinlemesine bir bakış için Git Reset Soft: Complete Guide yazımıza göz atın. Yalnızca son commit mesajını düzeltmek veya unutulan dosyaları eklemek gerekiyorsa, git commit --amend genellikle reset atmaktan daha hızlı bir alternatiftir.

git reset --mixed

Bu, git reset için varsayılan argümandır. Bu komutu çalıştırmak iki etki doğurur: (1) tüm değişikliklerin commit'ini geri alır ve (2) bunları staging'den çıkarır. Diyelim ki yanlışlıkla model_training.py dosyasını ekledik ve model eğitimi henüz bitmediği için bunu kaldırmak istiyoruz. İzlenecek yol şöyledir: 

  • Commit'te yer alan dosyaların staging'ini git reset HEAD ile kaldırın
  • Commit için yalnızca ihtiyacımız olan dosyaları ekleyin
git reset HEAD

git status

On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
model_training.py
data_acquisition.py
data_preprocessing.py

nothing added to commit but untracked files present (use "git add" to track)

Şimdi yalnızca son iki dosyayı commit edilecek şekilde ekleyebilir ve commit yapabiliriz.

git add data_acquisition.py data_preprocessing.py

git commit -m "Removed the model_training.py from the commit"

git reset --hard

Bu seçenek tehlikeli olabilir. Bu yüzden kullanırken dikkatli olun! 

Temelde, belirli bir commit'e hard reset uyguladığınızda, HEAD'i o commit'e zorla geri getirir ve sonrasındaki her şeyi siler.

Hard reset çalıştırmadan önce, klasörün içeriğine bir bakalım.

ls
data_acquisition.py data_preprocessing.py model_training.py

git reset --hard
HEAD is now at 97159bc added data acquisition and preprocessing scripts

Şimdi klasörün içeriğini kontrol edelim:

ls
data_acquisition.py data_preprocessing.py

İzlenmeyen model_training.py dosyasının silindiğini görüyoruz. Tekrar hatırlatalım: reset ifadesiyle ne yaptığınızı anladığınızdan emin olun; sonuçları dramatik olabilir!

Yanlışlıkla hard reset çalıştırırsanız, git reflog can simidinizdir. Git, tüm referans değişikliklerinin kaydını yaklaşık 30 gün tutar; böylece çoğu zaman git reflog çalıştırıp ardından git reset --hard HEAD@{n} ile reset öncesi duruma geri dönerek "kaybolan" commit'leri kurtarabilirsiniz. Unutmayın, commit'lenmemiş veya staging'e alınmamış değişiklikler bu şekilde kurtarılamaz.

Git Revert

Diagram of Revert - Before and After

Revert öncesi ve sonrası (Kaynak)

Git revert, git reset'e benzer, ancak yaklaşımı biraz farklıdır. Yoluna çıkan tüm commit'leri kaldırmak yerine, revert SADECE tek bir commit'i, commit öncesindeki staged dosyalara dönerek geri alır.

Yani bir commit'i kaldırmak yerine, git revert orijinal commit'in getirdiği değişiklikleri tersine çeviren yeni bir commit oluşturarak bu değişiklikleri tersine çevirir. Bu, geçmişinizi kaybetmenizi engellediği için bir commit'i geri almanın güvenli bir yoludur. 

Revert'in, commit hash'i veya referansı belirtilmediği sürece etkisi olmayacağını bilmek önemlidir. 

Birkaç yaygın git revert seçeneğini inceleyelim.

git revert --no-edit <commit ID>

--no-edit seçeneği, geri almak istediğiniz commit için kullanılan mesajı değiştirmemenize olanak tanır ve bu da git revert işleminin master dala yazılmasını sağlar.

Bu senaryoyu örneklemek için, eklenecek iki yeni dosya oluşturalım. 

touch model_monitoring.py data_monitoring.py

Bu dosyaları oluşturduktan sonra, bunları değişikliklerin bekleme alanına (staging area) eklememiz gerekir.

git add model_monitoring.py

Devam etmeden önce, aşağıdaki komutu çalıştırarak duruma bakalım.

git status
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file:   data_monitoring.py
new file:   model_monitoring.py


İki dosyanın eklendiğini görebiliyoruz, şimdi değişiklikleri commit edebiliriz.

git commit -m "Added the monitoring script files"
[master (root-commit) eae84e7] Added the monitoring script files
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 data_monitoring.py
create mode 100644 model_monitoring.py


Ardından, aşağıdaki komutla commit hash'i üretilebilir. Bu, bu belirli commit üzerinde işlem yapmak istediğinizde faydalıdır. 

git reflog
eae84e7 (HEAD -> master) HEAD@{0}: commit (initial): Added the monitoring script files

Şimdi, önceki commit'in istemeden yapıldığını ve ondan kurtulmak istediğimizi varsayalım.

git revert --no-edit eae84e7

[master c61ef6b] Revert "Added the monitoring script files"
Date: Sat Nov 12 20:14:17 2022 -0600
2 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 data_monitoring.py
delete mode 100644 model_monitoring.py

Commit günlüğüne bir bakalım:

git log

commit c61ef6b4e86f41f47c8c77de3b5fca3945a7c075 (HEAD -> master)
Author: Zoumana Keita <keitnekozou@gmail.com>
Date:   Sat Nov 12 20:14:17 2022 -0600

  Revert "Added the monitoring script files"
 
  This reverts commit eae84e7669af733ee6c1b854f2fcd9acfea9d4a3.

commit eae84e7669af733ee6c1b854f2fcd9acfea9d4a3
Author: Zoumana Keita <keitnekozou@gmail.com>
Date:   Sat Nov 12 20:05:57 2022 -0600

  Added the monitoring script files

Günlükten, eae84e7669af733ee6c1b854f2fcd9acfea9d4a3 kimlikli orijinal commit'i geri almak için c61ef6b4e86f41f47c8c77de3b5fca3945a7c075 kimliğine sahip yeni bir commit oluşturulduğunu görebiliriz. 

Bu örnekte tek bir commit olduğu için aynı etkiye sahip git revert HEAD de kullanılabilirdi. Daha fazla örnek için son commit'i geri alma rehberimize bakın.

git revert <commit hash>

Bu, yalnızca belirtilen commit hash'iyle ilişkili değişiklikleri kaldırır ve başka hiçbir commit'i etkilemez.

Önceden üretilen kimliği göz önüne alarak, sizce hangi git revert etkili olur? 

Cevabınız c61ef6b4e86f41f47c8c77de3b5fca3945a7c075 ise doğru. eae84e7669af733ee6c1b854f2fcd9acfea9d4a3 dikkate alınsa da etkisi olmayacaktır, çünkü yeni bir commit ile değiştirilmiştir. 

Şimdi, revert işlemini yapmaya çalıştığımızda ne olduğuna bakalım.

git revert c61ef6b4e86f41f47c8c77de3b5fca3945a7c075

[master aaead40] Revert "Revert "Added the monitoring script files""

 2 files changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 data_monitoring.py

 create mode 100644 model_monitoring.py

Gördüğünüz gibi, başlangıçta oluşturulup commit edilen iki dosya geri geldi!

git revert --no-commit <commit ID>

--no-commit veya -n seçeneğinin amacı, git'in revert işlemini otomatik olarak commit etmesini engellemektir. Bu, revert ifadesinin yaptığı değişiklikleri commit etmeden önce gözden geçirmek istediğiniz durumlarda faydalıdır.

Aşağıdaki örneği ele alalım: 

git revert --no-commit c61ef6b4e86f41f47c8c77de3b5fca3945a7c075

Bu, c61ef6b4e86f41f47c8c77de3b5fca3945a7c075 kimlikli commit'in yaptığı değişiklikleri geri alır, ancak bu geri almayı kaydetmek için otomatik olarak yeni bir commit oluşturmaz. Bunun yerine, ters değişiklikleri staging'e alır; böylece bunları gözden geçirip revert'i manuel olarak commit etmeye karar verebilirsiniz.

Git Revert vs. Reset

git reset ve git revert her ikisi de değişiklikleri geri alır, ancak farklı şekilde çalışırlar ve farklı durumlara uygundurlar.

Kriter git reset git revert
Nasıl çalışır Dal işaretçisini geriye alır, commit'leri geçmişten çıkarır Önceki bir commit'in değişikliklerini tersine çeviren yeni bir commit oluşturur
Commit geçmişi Geçmişi yeniden yazar (commit'ler kaldırılır) Tam geçmişi korur (yeni bir revert commit'i ekler)
Paylaşılan dallar için güvenli mi? Hayır (kaldırılan commit'leri çeken işbirlikçiler çatışmalar yaşar) Evet (geçmiş tüm işbirlikçiler için tutarlı kalır)
Kapsam Birden fazla commit'i aynı anda geri alabilir Bir seferde bir commit'i geri alır (toplu işlem için --no-commit kullanın)
En iyi kullanım durumu Push etmeden önce yerel veya özel dalları temizleme Uzak depoya zaten push edilmiş değişiklikleri geri alma
Risk seviyesi --hard ile yüksek (commit'lenmemiş çalışmaları kalıcı olarak siler) Düşük (veri kaybı olmaz)

Genel kural: push edilmemiş yerel geçmişi temizlemek için git reset, başkalarının çekmiş olabileceği değişiklikleri güvenle geri almak için git revert kullanın. Merge commit'lerini geri alma detayları için Git Revert Merge Commit rehberimize bakın.

Sonuç

Önemli nokta: Henüz push etmediğiniz yerel geçmişi temizlemek için git reset, paylaşılan dallardaki değişiklikleri güvenle geri almak için git revert kullanın. Özellikle git reset --hard konusunda dikkatli olun; çünkü çalışma dizininizdeki commit'lenmemiş değişiklikleri kalıcı olarak kaldırır. 

Git becerilerinizi geliştirmeye devam etmek için şu ilgili DataCamp eğitimlerine göz atın:

Git Reset ve Revert SSS

git reset ve git revert arasındaki fark nedir?

git reset, dal işaretçisini önceki bir commit'e taşıyarak yerel depodaki commit'leri geri almak için kullanılır; bu, o noktadan sonra yapılan commit'leri etkili biçimde atar. git revert ise depoya commit edilmiş değişiklikleri, belirli bir commit'in yaptığı değişiklikleri geri alan yeni bir commit oluşturarak geri almak için kullanılır.

git reset --hard kullanmalı mıyım?

git reset --hard kullanırken dikkatli olun; çünkü tüm değişiklikleri tamamen yok edebilir ve yerel dizinden kaldırabilir. Kullanmadan önce ne yaptığınızdan %100 emin olun.

Ne zaman git reset kullanmalıyım?

git reset, uzak bir depoya push edilmemiş commit'leri geri almak istediğinizde kullanışlıdır. Hata içeren ya da artık gereksiz olan commit'leri kaldırmak için kullanılabilir.

git reset'in yerel bir işlem olduğunu ve uzak depoyu etkilemediğini unutmamak önemlidir. Geri almak istediğiniz commit'leri zaten push ettiyseniz, bunun yerine git revert kullanmalısınız.

Ne zaman git revert kullanmalıyım?

git revert, uzak bir depoya zaten push edilmiş commit'leri geri almak istediğinizde kullanışlıdır. Herhangi bir commit'i yok etmediği ve depoda yapılan değişikliklerin net bir kaydını bıraktığı için güvenli bir seçenektir.

git revert'in yalnızca başka dallara birleştirilmemiş commit'leri geri alabileceğini unutmamak önemlidir. Birleştirilmiş bir dalın parçası olan commit'leri geri almak istiyorsanız, commit'leri kaldırmak için git reset veya başka bir yöntem kullanmalısınız.

git reset nedir?

git reset, commit geçmişinizde veya çalışma dizininizdeki değişiklikleri geri almak için kullanılır. HEAD'i belirli bir commit'e sıfırlamanıza ve isteğe bağlı olarak dizini (staging alanı) ve çalışma dizinini değiştirmenize olanak tanır. 

git reset'te --soft, --mixed ve --hard arasındaki farklar nelerdir?

--soft: HEAD'i belirtilen commit'e taşır ancak değişiklikleri commit için staged halde tutar. --mixed (varsayılan): HEAD'i belirtilen commit'e taşır ve değişiklikleri staging'den çıkarır (çalışma dizini olduğu gibi kalır). --hard: HEAD'i belirtilen commit'e taşır ve dizin ile çalışma dizinindeki tüm değişiklikleri atar.

Konular
Git
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör