Sebelum menjawab, mari tambahkan beberapa latar belakang, jelaskan apa ini HEAD
. karena beberapa opsi di bawah ini akan menghasilkan kepala terpisah
First of all what is HEAD?
HEAD
hanyalah referensi ke komit saat ini (terbaru) di cabang saat ini.
Hanya ada satu HEAD
pada waktu tertentu. (tidak termasuk git worktree
)
Konten HEAD
disimpan di dalam .git/HEAD
dan berisi 40 byte SHA-1 dari komit saat ini.
detached HEAD
Jika Anda tidak menggunakan komit terbaru - artinya HEAD
menunjuk komit sebelumnya dalam sejarah yang disebut detached HEAD
.
Pada baris perintah, ini akan terlihat seperti ini- SHA-1 bukan nama cabang karena HEAD
tidak menunjuk ke ujung cabang saat ini
Beberapa opsi tentang cara memulihkan dari HEAD yang terpisah:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Ini akan mengecek cabang baru yang menunjuk ke komit yang diinginkan.
Perintah ini akan checkout ke komit yang diberikan.
Pada titik ini, Anda dapat membuat cabang dan mulai bekerja sejak saat ini.
# 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>
Anda selalu dapat menggunakan itu reflog
juga.
git reflog
akan menampilkan perubahan apa pun yang memperbarui HEAD
dan memeriksa entri reflog yang diinginkan akan mengaturHEAD
kembali komitmen ini.
Setiap kali KEPALA diubah akan ada entri baru di reflog
git reflog
git checkout HEAD@{...}
Ini akan membuat Anda kembali ke komit yang Anda inginkan
"Pindahkan" KEPALA Anda kembali ke komit yang diinginkan.
# 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.
- Catatan: ( Karena Git 2.7 )
Anda juga bisa menggunakan itu git rebase --no-autostash
.
"Undo" rentang komit atau komit yang diberikan.
Perintah reset akan "membatalkan" setiap perubahan yang dilakukan dalam komit yang diberikan.
Komit baru dengan undo patch akan dilakukan sementara komit asli akan tetap ada dalam sejarah juga.
# 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>
Skema ini menggambarkan perintah mana melakukan apa.
Seperti yang Anda lihat ada reset && checkout
modifikasi HEAD
.