Dari git reset
"tarik" atau "gabungkan" selalu meninggalkan ujung asli dari cabang saat ini ORIG_HEAD
.
git reset --hard ORIG_HEAD
Menyetel ulang dengan keras akan mengembalikan file indeks dan pohon kerja Anda ke status itu, dan mengatur ulang ujung cabang ke komit itu.
git reset --merge ORIG_HEAD
Setelah memeriksa hasil penggabungan, Anda mungkin menemukan bahwa perubahan di cabang lain tidak memuaskan. Menjalankan " git reset --hard ORIG_HEAD
" akan membuat Anda kembali ke tempat Anda sebelumnya, tetapi itu akan membuang perubahan lokal Anda, yang tidak Anda inginkan. " git reset --merge
" simpan perubahan lokal Anda.
Sebelum tambalan diterapkan, ORIG_HEAD disetel ke ujung cabang saat ini.
Ini berguna jika Anda memiliki masalah dengan banyak komit, seperti menjalankan ' git am
' pada cabang yang salah atau kesalahan dalam komit yang lebih mudah diperbaiki dengan mengubah kotak surat (mis. + Kesalahan pada baris "Dari:").
Selain itu, gabungan selalu menyetel ' .git/ORIG_HEAD
' ke status asli HEAD sehingga gabungan yang bermasalah dapat dihapus dengan menggunakan ' git reset ORIG_HEAD
'.
Catatan: dari sini
KEPALA adalah pointer yang bergerak. Terkadang itu berarti cabang saat ini, kadang tidak.
Jadi HEAD BUKAN sinonim untuk "cabang saat ini" di mana-mana sudah.
KEPALA berarti "arus" di mana-mana di git, tetapi itu tidak harus berarti "cabang saat ini" (yaitu KEPALA terlepas).
Tetapi hampir selalu berarti "komit saat ini".
Ini adalah komit yang " git commit
" dibangun di atas, dan " git diff --cached
" dan " git status
" dibandingkan.
Ini berarti cabang saat ini hanya dalam konteks yang sangat terbatas (tepatnya ketika kami ingin nama cabang untuk beroperasi --- mengatur ulang dan menumbuhkan ujung cabang melalui komit / rebase / dll.).
Reflog adalah kendaraan untuk kembali ke masa dan mesin waktu memiliki interaksi yang menarik dengan gagasan "saat ini".
HEAD@{5.minutes.ago}
bisa berarti "dereference HEAD symref untuk mengetahui cabang apa yang kita miliki sekarang, dan kemudian cari tahu di mana ujung cabang itu 5 menit yang lalu".
Atau itu bisa berarti "apa komit saya akan disebut sebagai KEPALA 5 menit yang lalu, misalnya jika saya melakukan" git show KEPALA "saat itu".
git1.8.4 (Juli 2013) memperkenalkan memperkenalkan notasi baru!
(sebenarnya, untuk 1.8.5 atau 1.9, Q4 2013: diperkenalkan kembali dengan commit 9ba89f4 )
Daripada mengetik empat huruf kapital " HEAD
", Anda bisa mengatakan " @
" sekarang,
mis. " git log @
".
Lihat komit cdfd948
Mengetik ' HEAD
' membosankan, terutama saat kita bisa menggunakan ' @
' sebagai gantinya.
Alasan untuk memilih ' @
' adalah karena mengikuti secara alami dari ref@op
sintaks (misalnya HEAD@{u}
), kecuali kita tidak memiliki ref, dan tidak ada operasi, dan ketika kita tidak memiliki itu, masuk akal untuk mengasumsikan ' HEAD
'.
Jadi sekarang kita bisa menggunakan ' git show @~1
', dan semua kebaikan itu.
Sampai sekarang ' @
' adalah nama yang valid, tetapi bertentangan dengan ide ini, jadi mari kita buat itu tidak valid. Mungkin sangat sedikit orang, jika ada, yang menggunakan nama ini.
Sebuah posting blog selama periode 1.8.4-rc3 (14 Agustus 2013) mengumumkan bahwa fitur ini dikembalikan dan ditunda (Terima kasih Cupcake untuk informasi lebih lanjut ).
Sekali lagi, ini diperkenalkan lagi dengan komit 9ba89f4 (September 2013).
Lihat komit 2c2b664 :
Kembalikan "Tambahkan @
pintasan baru untuk HEAD
"
Ini mengembalikan komit cdfd948 , karena tidak hanya berlaku untuk " @
" (dan bentuk dengan pengubah seperti @{u}
diterapkan pada itu), tetapi juga mempengaruhi misalnya " refs/heads/@/foo
", yang seharusnya tidak.
Gagasan dasar untuk memberikan bantuan mungkin bagus, dan topik tersebut dapat dicoba lagi nanti, tetapi mari kembali untuk menghindari memengaruhi kasus penggunaan yang ada untuk saat ini untuk rilis mendatang.
HEAD
sekarang (git1.8.4 mendatang) '@
'! Lihat jawaban saya yang diedit di bawah ini