Bu, "geri alma" ile ne demek istediğinize çok bağlıdır.
Geçici olarak farklı bir işleme geç
Geçici olarak geri dönmek, etrafta dolanmak, sonra bulunduğunuz yere geri dönmek istiyorsanız, tek yapmanız gereken istenen taahhüdü kontrol etmektir:
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
Veya siz oradayken taahhütte bulunmak istiyorsanız, devam edin ve siz oradayken yeni bir şube yapın:
git checkout -b old-state 0d1d7fc32
Bulunduğunuz yere geri dönmek için, bulunduğunuz şubeyi tekrar kontrol edin. (Şube değiştirirken her zaman olduğu gibi değişiklik yaptıysanız, onlarla uygun şekilde ilgilenmeniz gerekir. Onları atmak için sıfırlayabilirsiniz; saklamak, satın almak, yanınıza almak için saklamak için kullanabilirsiniz; orada bir şubeye ihtiyacınız varsa onları bir şubeye yönlendirin.)
Yayınlanmayan taahhütleri silmek zor
Öte yandan, o zamandan beri yaptığınız her şeyden gerçekten kurtulmak istiyorsanız, iki olasılık var. Birincisi, bu taahhütlerin hiçbirini yayınlamadıysanız, sıfırlayın:
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
Ortalığı karıştırırsanız, yerel değişikliklerinizi zaten atmış olursunuz, ancak en azından daha önce sıfırlayarak tekrar bulunduğunuz yere geri dönebilirsiniz.
Yeni taahhütlerle yayınlanan taahhütleri geri al
Öte yandan, çalışmayı yayınladıysanız, muhtemelen geçmişi yeniden yazmaktan dolayı şubeyi sıfırlamak istemezsiniz. Bu durumda, taahhütleri geri alabilirsiniz. Git ile geri dönmenin çok özel bir anlamı vardır: ters yama ile iptal etmek için bir taahhüt oluşturun. Bu şekilde hiçbir geçmişi yeniden yazmazsınız.
# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053
# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD
#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053
# Reverting a merge commit
git revert -m 1 <merge_commit_sha>
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
git-revert
Manpage aslında açıklamasında bu çok kapsar. Bir başka faydalı bağlantı ise git-revert tartışan bu git-scm.com bölümüdür .
Sonuçta geri dönmek istemediğinize karar verirseniz, geri döndürmeyi (burada açıklandığı gibi) geri alabilir veya geri dönmeden önce geri yükleyebilirsiniz (önceki bölüme bakın).
Bu yanıtı şu durumda da yararlı bulabilirsiniz:
HEAD'i önceki bir konuma nasıl taşıyabilirim? (Müstakil kafa)