Terkadang saat debugging saya akan checkout komit dari cabang. Ini menempatkan saya di kepala terpisah. Seringkali saya dapat menggunakan git checkout - untuk kembali ke kepala cabang. Tetapi terkadang saya akan memeriksa beberapa komit secara berurutan sehingga ini hanya akan membawa saya kembali ke komit terakhir. Apakah ada cara yang lebih pasti untuk kembali ke kepala cabang? Apakah ada cara tanpa mengetikkan seluruh nama cabang mis. git checkout <branch-name>?

0
Daniel Kobe 5 Januari 2021, 20:42

3 jawaban

Jawaban Terbaik

Terima kasih atas jawaban lain tetapi saya menemukan solusi lain

git checkout `git branch --sort=committerdate | tail -1`

git branch --sort=comitterdate akan mengembalikan cabang dalam urutan yang terakhir kali diperiksa.

Inilah yang akan terlihat seperti output ketika Anda berada di kepala yang terpisah, itu tidak melacak riwayat cabang yang terlepas sehingga hasil pertama akan menjadi cabang terakhir yang tidak terpisah tempat Anda berada.

  branch1
  branch2
  master
* (HEAD detached at 1d4de8881)
  last-non-detached-head-branch-checked-out
0
Daniel Kobe 5 Januari 2021, 21:32

Cara pasti untuk kembali ke kepala cabang adalah

git checkout <branch-name>  # such as master

Anda mungkin harus berurusan dengan perubahan yang tidak dikomit terlebih dahulu, dan jika Anda telah membuat komit dalam keadaan terpisah, Anda akan diperingatkan bahwa Anda meninggalkannya. Anda dapat cherry-pick mereka ke cabang, jika mereka berharga.

Untuk membuat alias untuk nama cabang, Anda dapat menggunakan variabel di shell apa pun yang Anda gunakan:

short="very-long-annoying-branch-name"
git co $short

Referensi simbolik git tampaknya tidak berguna untuk tujuan ini. Ide lain adalah membuat git alias untuk memeriksa cabang tertentu.

Transkrip sebenarnya:

$ git config --global alias.coms 'checkout master'
$ git coms
Already on 'master'
Your branch is ahead of 'remotes/origin/master' by 7 commits.
  (use "git push" to publish your local commits)

Mungkin hindari --global untuk nama cabang yang sangat spesifik untuk repo tertentu.

1
Kaz 5 Januari 2021, 18:10

Sebagai alternatif dari jawaban @ Kaz, Anda mungkin ingin mencoba git reflog?

Kemudian, git checkout HEAD@{1} misalnya.

Untuk detail selengkapnya, Anda dapat menjalankan man gitrevisions atau mengambil dok. Kutipan:

[…]
<refname>@{<n>}, e.g. master@{1}

Ref yang diikuti oleh akhiran @ dengan spesifikasi ordinal yang diapit oleh pasangan kurung kurawal (misalnya {1}, {15}) menentukan nilai sebelumnya ke-n dari ref tersebut. Misalnya master@{1} adalah nilai awal master langsung sedangkan master@{5} adalah nilai master ke-5 sebelumnya. Sufiks ini hanya dapat digunakan segera setelah nama ref dan ref harus memiliki log yang ada ($GIT_DIR/logs/<refname>).
[…]

0
ErikMD 5 Januari 2021, 18:11