Saya melakukan a git bisect
dan setelah sampai pada komit bermasalah, saya sekarang mencoba untuk melangkah maju / mundur untuk memastikan saya berada di langkah yang benar.
Saya tahu HEAD^
harus mundur dalam sejarah tetapi apakah ada jalan pintas lain untuk membawa saya maju (menuju komitmen tertentu di masa depan) seperti:
A - B - C(HEAD) - D - E - F
Saya tahu bahwa target saya adalah F dan saya ingin pindah dari C ke D .
CATATAN: ini bukan duplikat Git: Bagaimana cara berpindah-pindah antar commit , pertanyaan saya sedikit berbeda dan tidak terjawab di sana
git checkout -b new_branch HEAD~4
untuk kembali 4 komit dari HEAD seperti di stackoverflow.com/a/4940090/911945Jawaban:
Saya telah bereksperimen sedikit dan ini tampaknya melakukan trik untuk menavigasi ke depan ( edit : ini berfungsi dengan baik hanya ketika Anda memiliki riwayat linier tanpa melakukan penggabungan):
di mana
towards
SHA1 dari komit atau tag.Penjelasan:
$()
berarti: dapatkan semua komit antara saat iniHEAD
dantowards
komit (tidak termasukHEAD
), dan urutkan mereka dalam urutan prioritas (sepertigit log
secara default - alih-alih urutan kronologis yang anehnya default untukrev-list
), dan kemudian ambil yang terakhir (tail
), yaitu yang ingin kita tuju.git checkout
untuk melakukan pembayaran.Anda dapat menentukan fungsi yang dapat diakses sebagai alias yang mengharapkan parameter dalam
.profile
file Anda untuk mengarahkan maju menuju komit tertentu:sumber
git log
menunjukkan komit dalam urutan kronologis, secara default, sama sepertirev-list
, kecuali saat menggunakan--graph
bendera.Yang Anda butuhkan untuk memperjelas, bukan status kepala terpisah adalah menyetel ulang, bukan melakukan pembayaran.
sumber
git reset "HEAD@{1}"
pada cangkang tertentu seperti fish dan PowerShell ..git reflog
juga dapat berguna untuk menemukan komit yang benar.git reset HEAD
untuk kembali ke tempat saya dulu ... sekarang saya tidak tahu di mana keadaan tempat penyimpanan saya dan semuanya menakutkan. Apa yang harus saya lakukan sekarang?Saya yakin Anda bisa melakukan:
Untuk maju satu komitmen pada waktunya. Untuk maju beberapa komit, gunakan HEAD @ {2}, HEAD @ {3}, dll.
sumber
Inilah yang saya gunakan untuk menavigasi bolak-balik.
pindah ke komit berikutnya
pindah ke komit sebelumnya
sumber
git checkout <current branch>
lampirkan ke commit terbaru.git checkout -b <new-branch-name>
dari komit saat ini memungkinkan perubahan di cabang baru.git rebase -i
juga bekerja. Juga , saya menamain()
fungsi sayanx()
untuk menghindari konflik dengan manajer versi node "n". Pastikan untuk memeriksa alias!Katakanlah F adalah komit terbaru pada
trunk
(masukkan nama cabang Anda sendiri di sini) ... Anda dapat merujuknya sebagaitrunk~0
(atau hanyatrunk
), E sebagaitrunk~1
, D sebagaitrunk~2
dll.Lihat reflog Anda untuk mengetahui lebih banyak cara untuk memberi nama komitmen.
sumber
F
, dan Anda tahu di mana dalam sejarah cabang itu Anda ingin pindah. Ini tidak mencoba untuk bergerak maju relatif terhadap HEAD, tetapi kurang jauh ke belakang dibandingkan dengan trunk.trunk~2
A?trunk
dan arus AndaHEAD
identik tidak diperlihatkan dalam pertanyaan, yang saya nyatakan bukan seperti yang saya asumsikan, dan yang sangat tidak mungkin di tengah jalanbisect
Melintasi mundur itu sepele karena Anda sedang turun dari pohon, dan selalu ada satu cara untuk pergi
Saat melakukan traverse maju Anda bergerak ke atas pohon, jadi Anda perlu menjelaskan cabang mana yang Anda targetkan:
Penggunaan:
git down
,git up <branch-name>
sumber
HEAD^
biasanya default yang wajar.Jika Anda ingin melihat ke depan, Anda dapat melakukan trik ini, karena Git tidak memiliki perintah yang ketat untuk itu.
Contoh
Daftar hash riwayat log:
menggunakan perintah
git log --reverse C..
, output Anda akan melihat B dan A .sumber
Mungkin bukan cara terbaik tetapi Anda dapat menggunakan
git log
untuk melihat daftar komit dan kemudian gunakangit checkout [sha1 of D]
untuk pindah ke D.sumber
Saya baru saja melakukan tes untuk ini. katakan misalnya Anda berada di cabang master Kemudian lakukan:
Jadi head terlepas, dan Anda dapat mencobanya lagi untuk beralih ke commit lain:
Setelah Anda selesai melihat-lihat, Anda dapat kembali ke keadaan semula hanya dengan memeriksa ke cabang itu. Dalam contoh saya: cabang master
Jika Anda tidak ingin pergi ke keadaan semula, dan ingin tetap salah satu komit sebagai kepala Anda dan melanjutkan dari sana, maka Anda perlu keluar dari sana. misalnya setelah "git checkout HEAD @ {4}", Anda dapat mengeluarkan
sumber
Sebagai solusinya, Anda bisa kembali ke HEAD dengan
Dan kemudian pindah ke komit yang Anda inginkan, dengan
sumber
Jika Anda menggunakan kode vs maka riwayat Git adalah plugin yang luar biasa di mana Anda dapat secara efisien melihat komit dan memeriksa kontennya di editor itu sendiri. lihat tautannya
sumber
dimana:
branchName
sama dengan nama cabangcommitInOrder
sama dengan komit dalam urutan dari komit pertama di cabang yang dipilih (jadi 1 adalah komit pertama, 2 komit kedua di cabang, dll.)sumber