Git reflog

Git Tingkat Lanjut

Amanda Crawford-Adamo

Software and Data Engineer

Apa itu Git Reflog?

  1. Catatan lokal dari SEMUA pembaruan referensi di repositori kita
  2. Reflog disimpan secara lokal di direktori .git/logs/refs/heads/
  3. Mencatat perubahan tip branch dan posisi HEAD
  4. Menjadi pengaman untuk operasi Git
  5. Membantu memulihkan perubahan atau penghapusan tidak sengaja

Contoh grafik perubahan riwayat git

Git Tingkat Lanjut

Git Reflog vs Git Log

Fitur Git Reflog Git Log
Tujuan Menampilkan pembaruan referensi dan penulisan ulang di repo lokal Hanya menampilkan riwayat commit
Cakupan Hanya repositori lokal Repositori lokal dan remote
Konten Semua pembaruan ref (commit, reset, merge, dll.) Hanya commit
Persistensi Sementara (biasanya 90 hari) Permanen (bagian dari riwayat repo)
Use Case Memulihkan commit yang hilang, memahami aksi terbaru Melihat riwayat proyek, memahami pengembangan fitur
Git Tingkat Lanjut

Perintah Reflog

  • Menampilkan data log dan aktivitas HEAD
    git reflog
    git reflog show
    
  • Bersihkan entri log lama atau yang tidak terjangkau
    git reflog expire
    
Git Tingkat Lanjut

Struktur Keluaran Reflog

Rincian struktur teks keluaran reflog

Contoh keluaran reflog di terminal

Komponen Deskripsi
short-hash Hash commit yang dipersingkat
ref Biasanya HEAD, bisa juga nama branch
index Posisi di reflog (0 paling baru)
action Jenis aksi (commit, reset, merge, dll.)
descriptions Deskripsi tentang aksi
1 https://hackernoon.com/time-to-rewrite-your-git-history-effectively-with-git-reflog
Git Tingkat Lanjut

Pemfilteran: Since dan Until

  • since = tampilkan entri sejak waktu ini

    git reflog --since "time-qualifer"
    
  • until = tampilkan entri hingga waktu ini

    git reflog --until "time-qualifer"
    
Penggunaan
git reflog --since="1 week ago"
git reflog --until="yesterday"
git reflog --until="2024-01-01"
Git Tingkat Lanjut

Memulihkan Branch yang Terhapus

Skenario

  • Membuat branch bernama etl-feature
  • Commit perubahan fitur ETL ke branch ini
  • Branch ini tidak sengaja dihapus
  • Semua perubahan kode hilang

Bagaimana memulihkan branch etl-feature?

Solusi

  1. Identifikasi hash commit di ujung branch yang dihapus dengan git reflog
  2. Gunakan git checkout untuk memindahkan HEAD ke hash commit tersebut
  3. Buat branch baru dari commit tempat HEAD saat ini menunjuk
git reflog
git checkout <hash>
git checkout -b <branch-name>
1 https://stackoverflow.com/questions/3640764/can-i-recover-a-branch-after-its-deletion-in-git
Git Tingkat Lanjut

Git Reset

  • Memindahkan HEAD ke objek commit tertentu.
  • Tergantung tipe reset, area kerja dan staging akan diperbarui.
Tipe Reset Perintah Dampak pada Working Directory Dampak pada Staging Area
Soft git reset --soft <commit> Tidak ada perubahan Perubahan tetap staged
Mixed (Default) git reset --mixed <commit> Tidak ada perubahan Perubahan di-unstage
Hard git reset --hard <commit> Perubahan dibuang Perubahan dibuang
Git Tingkat Lanjut

Menemukan Commit yang Hilang

Skenario

  • Tes mulai gagal setelah commit dan rebase
  • Commit tidak diketahui menyebabkan kegagalan
  • Perlu kembali ke kondisi lulus

Bagaimana mengembalikan perubahan skrip ETL sebelumnya?

Solusi

  1. Temukan hash commit yang terhapus dengan Git Reflog
  2. Gunakan git reset untuk kembali ke commit dengan tes yang lulus
git reflog
git reset --soft HEAD@{1}
Git Tingkat Lanjut

Praktik Terbaik

  • Kuat untuk memulihkan kode dan commit yang hilang
  • Gunakan pesan commit yang deskriptif
  • Sering-sering push ke remote
  • Hati-hati dengan force push

Reflog adalah mesin waktu lokal saat kita keliru

Gambar jam yang mundur ke masa lalu

Git Tingkat Lanjut

Ayo berlatih!

Git Tingkat Lanjut

Preparing Video For Download...