Cevaplamadan önce bunun ne olduğunu açıklayarak biraz arka plan ekleyelim HEAD
. çünkü aşağıdaki seçeneklerden bazıları kopuk kafa ile sonuçlanacaktır
First of all what is HEAD?
HEAD
yalnızca geçerli daldaki geçerli taahhüde (en son) bir referanstır. Herhangi bir zamanda
sadece bir tane olabilir HEAD
. (hariç git worktree
)
İçeriği HEAD
depolanır .git/HEAD
ve mevcut taahhüdün 40 bayt SHA-1'ini içerir.
detached HEAD
En son taahhütte değilseniz - yani HEAD
tarihte önceki bir taahhüde işaret eden anlamına gelir detached HEAD
.
Komut satırında, HEAD
şu anki dalın ucuna işaret etmediğinden , dal adı yerine SHA-1 gibi görünecektir.
Müstakil bir KAFADAN kurtarma için birkaç seçenek:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Bu, istenen taahhüde işaret eden yeni şubeyi kontrol edecektir.
Bu komut, verilen bir taahhüde ödeme yapar.
Bu noktada, bir şube oluşturabilir ve bu noktadan itibaren çalışmaya başlayabilirsiniz.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
Her zaman da kullanabilirsiniz reflog
.
git reflog
güncellenen değişiklikleri görüntüleyecek HEAD
ve istenen reflog girişini kontrol HEAD
etmek bu işleme geri dönecektir.
HEAD her değiştirilişinde, reflog
git reflog
git checkout HEAD@{...}
Bu sizi istediğiniz taahhüde geri götürür
HEAD'inizi istenen işleme geri "taşıyı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.
Verilen taahhüt veya taahhüt aralığını "Geri al".
Sıfırlama komutu, verilen işlemde yapılan değişiklikleri "geri alır".
Geri alma yamasıyla yeni bir taahhüt gerçekleştirilecek, orijinal taahhüt de tarihte kalacaktır.
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
Bu şema hangi komutun ne yaptığını gösterir.
Gördüğünüz gibi orada reset && checkout
değiştirin HEAD
.