Revolusi Git History! Panduan Lengkap Ganti Nama & Email Author di Banyak Commit Sekaligus dengan Git Rebase

Halo AnakInformatika! Pernah ngalamin kejadian di mana kamu sadar ada commit di Git repository-mu yang authornya salah? Entah itu salah ketik nama, pakai email pribadi di proyek kantor, atau sebaliknya? Atau mungkin kamu lupa setup user.name dan user.email di Git saat pertama kali setup, jadinya nama dan email di commit-commit awal jadi aneh?

Jangan panik! Ini adalah masalah umum yang sering dihadapi developer. Untungnya, Git punya solusinya. Dalam panduan lengkap dan mendalam ini, kita akan belajar Panduan Merapikan Git History: Cara Ganti Nama/Email Author di Banyak Commit Sekaligus Pakai Git Rebase. Ya, kamu tidak salah dengar, kita bisa merapikan history yang berantakan itu!

Mengapa Perlu Merapikan Git History? (Dan Analogi Buku Harian)

Git history itu ibarat buku harian proyekmu. Setiap commit adalah satu entri, yang mencatat siapa yang menulisnya (author), kapan (timestamp), dan apa yang diubah (pesan commit dan perubahan kode). Bayangkan kalau di buku harianmu, ada beberapa entri yang ditulis dengan nama orang lain, atau nama kamu sendiri tapi salah eja. Pasti jadi bingung kan saat menelusuri siapa yang sebenarnya melakukan perubahan itu?

Dalam konteks pengembangan software, memiliki Git history yang bersih dan akurat itu penting banget:

  • Akuntabilitas: Memudahkan kita melacak siapa yang bertanggung jawab atas suatu perubahan, terutama saat ada bug atau perlu memahami logika di balik sebuah fitur.
  • Profesionalisme: Menunjukkan kerapian dan perhatian terhadap detail dalam pekerjaanmu.
  • Kolaborasi: Mempermudah tim untuk berkolaborasi dan memahami kontribusi masing-masing anggota.

Nah, Git rebase adalah "penghapus ajaib" yang memungkinkan kita untuk mengedit atau mengatur ulang "entri" di buku harian proyek kita. Dengan rebase interaktif, kita bisa menelusuri kembali commit-commit yang sudah ada dan melakukan penyesuaian, termasuk mengganti nama dan email authornya.

💡 Tip: Meskipun kuat, merapikan Git history harus dilakukan dengan hati-hati. Ingat prinsip ini: jangan pernah merebase commit yang sudah di-push ke shared remote repository jika ada orang lain yang sudah menarik (pull) perubahan tersebut. Jika terpaksa, komunikasikan dengan timmu terlebih dahulu!

Prasyarat Sebelum Beraksi

Sebelum kita mulai 'operasi' merapikan Git history, pastikan kamu sudah punya beberapa hal ini:

  • Git Terinstal: Tentu saja! Kamu bisa cek versi Git-mu dengan perintah git --version. Versi Git yang relatif baru (misalnya 2.x ke atas) akan lebih baik.
  • Pemahaman Dasar Git: Kamu setidaknya sudah familiar dengan konsep dasar Git seperti commit, branch, push, dan pull.
  • Text Editor: Git akan membuka text editor default-mu (seperti Vim, Nano, VS Code, Sublime Text) saat melakukan rebase interaktif. Pastikan kamu nyaman menggunakannya.
  • Repo Lokal yang Aman: Pastikan kamu bekerja di copy lokal repository-mu. Lebih baik lagi, buat branch baru untuk eksperimen!
⚠️ Catatan Penting: Proses penggantian author ini akan mengubah SHA-1 hash dari commit-commit yang terlibat. Ini berarti history-nya akan berubah. Jika kamu bekerja di shared repository, perubahan ini akan mengharuskan kamu melakukan git push --force atau git push --force-with-lease. Selalu berhati-hati dan komunikasikan dengan tim jika kamu force push ke branch yang sama-sama dikerjakan!

Langkah-langkah Praktis Mengganti Author dengan Git Rebase

Yuk, kita mulai dengan skenario di mana kamu punya beberapa commit dengan nama/email author yang salah. Kita akan pakai simulasi repository lokal untuk demonstrasi.

Langkah 1: Persiapan Repository Simulasi

Pertama, kita akan membuat repository Git baru dan menambahkan beberapa commit dengan author yang "salah" atau berbeda-beda.


# Buat direktori proyek baru
mkdir git-history-cleanup
cd git-history-cleanup

# Inisialisasi Git repository
git init

# Setting author yang salah untuk beberapa commit awal
git config user.name "Anak Informatik"
git config user.email "anak.informatik@example.com"

# Commit pertama dengan author yang salah
echo "Initial project setup" > README.md
git add README.md
git commit -m "feat: Initial project setup"

# Ganti author lagi untuk commit berikutnya (misal: pakai nama lain)
git config user.name "Dev Testing"
git config user.email "dev.testing@example.com"

# Commit kedua
echo "Added feature A" >> feature-a.txt
git add feature-a.txt
git commit -m "feat: Implement feature A"

# Ganti author lagi
git config user.name "Guest User"
git config user.email "guest@example.com"

# Commit ketiga
echo "Fixed bug B" >> bug-fix.txt
git add bug-fix.txt
git commit -m "fix: Resolve bug B"

# Terakhir, ganti ke author yang benar yang kita inginkan
git config user.name "Anak Informatika"
git config user.email "redaksi@anakinformatika.com"

# Commit keempat (dengan author yang benar)
echo "Added feature C" >> feature-c.txt
git add feature-c.txt
git commit -m "feat: Implement feature C"

Sekarang, coba cek history Git-mu:


git log --pretty=format:"%h %an <%ae> %s" --reverse

Output yang kamu dapatkan mungkin akan terlihat seperti ini (hash commit akan berbeda):


// Contoh Output:
e1f3a2f Anak Informatik  feat: Initial project setup
8a2b1c3 Dev Testing  feat: Implement feature A
c7d8e9f Guest User  fix: Resolve bug B
f0a1b2c Anak Informatika  feat: Implement feature C

Di sini, kita ingin mengubah author dari tiga commit pertama menjadi "Anak Informatika ".

Langkah 2: Identifikasi Commit Target dan Base Commit

Kita perlu menentukan dari commit mana kita akan memulai rebase. Kita ingin mengubah commit e1f3a2f, 8a2b1c3, dan c7d8e9f. Oleh karena itu, kita akan memulai rebase dari commit sebelum commit pertama yang ingin diubah. Karena e1f3a2f adalah commit pertama di repo ini, base commit kita adalah "parent" dari commit tersebut, yang bisa diwakili oleh HEAD~4 (jika ada 4 commit total) atau lebih mudahnya, kita bisa menggunakan hash commit dari commit *sebelum* commit pertama yang ingin kita perbaiki jika ada commit yang lebih awal. Jika tidak ada, kita bisa menggunakan opsi --root atau commit hash dari commit yang valid sebelum range yang ingin diubah.

Dalam kasus ini, karena kita ingin mengubah dari commit pertama, kita akan menggunakan commit hash dari commit *sebelum* commit pertama yang ingin kita modifikasi. Atau, kita bisa menggunakan HEAD~N di mana N adalah jumlah commit yang ingin kita libatkan + 1.

Karena kita ingin mengubah 3 commit pertama (e1f3a2f, 8a2b1c3, c7d8e9f), dan ada 4 commit total, kita bisa menggunakan HEAD~4 untuk memulai rebase dari sebelum semua commit ini.


# Pastikan kamu berada di branch yang benar (misal: main atau master)
git checkout main // atau master

# Cek log lagi untuk memastikan urutan commit dan jumlahnya
git log --pretty=format:"%h %s" --reverse

// Misal, outputnya:
// e1f3a2f feat: Initial project setup
// 8a2b1c3 feat: Implement feature A
// c7d8e9f fix: Resolve bug B
// f0a1b2c feat: Implement feature C

// Kita ingin mengubah 3 commit pertama. Jadi base commit untuk rebase adalah commit sebelum 'e1f3a2f'.
// Jika 'e1f3a2f' adalah commit pertama di repo, kita bisa menggunakan `HEAD~4`
// karena ada 4 commit di history.
// Atau, jika ada commit lain sebelumnya (misal commit kosong), kita bisa pakai hash-nya.
// Untuk kasus ini, `HEAD~4` akan mencakup semua commit.

Langkah 3: Memulai Git Rebase Interaktif

Sekarang, kita akan memulai proses rebase interaktif. Perintahnya adalah:


git rebase -i HEAD~4
// Atau ganti HEAD~4 dengan hash commit dari commit yang paling awal yang ingin kamu ubah,
// diikuti oleh ^ (caret) untuk menyertakan commit itu sendiri.
// Contoh: git rebase -i c7d8e9f^

Git akan membuka text editor default-mu dengan daftar commit yang akan direbase. Kamu akan melihat sesuatu seperti ini:


pick e1f3a2f feat: Initial project setup
pick 8a2b1c3 feat: Implement feature A
pick c7d8e9f fix: Resolve bug B
pick f0a1b2c feat: Implement feature C

# Rebase 272c43e..f0a1b2c onto 272c43e (4 commands)
# ... (komentar lainnya dari Git)

Kita ingin mengubah author untuk commit e1f3a2f, 8a2b1c3, dan c7d8e9f. Untuk melakukan ini, kita perlu mengubah kata pick menjadi edit (atau e) di depan setiap commit yang authornya ingin kita ganti. Commit f0a1b2c sudah benar authornya, jadi kita biarkan pick.

Edit file tersebut sehingga menjadi:


edit e1f3a2f feat: Initial project setup
edit 8a2b1c3 feat: Implement feature A
edit c7d8e9f fix: Resolve bug B
pick f0a1b2c feat: Implement feature C // Commit ini authornya sudah benar

# Rebase 272c43e..f0a1b2c onto 272c43e (4 commands)
# ...

Simpan dan tutup editor. Git akan mulai melakukan rebase dan akan berhenti di commit pertama yang kamu tandai sebagai edit (yaitu e1f3a2f).

Langkah 4: Mengganti Nama/Email Author untuk Setiap Commit (Berulang)

Saat Git berhenti di commit pertama, kamu akan melihat pesan seperti ini:


Stopped at e1f3a2f... feat: Initial project setup
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

Berikut adalah kelanjutan artikel panduan lengkap merapikan Git history milikmu:

Ini adalah saat di mana kita melakukan tindakan perbaikan. Untuk mengubah author dari commit tempat Git sedang berhenti, jalankan perintah berikut:

Bash
git commit --amend --author="Anak Informatika <redaksi@anakinformatika.com>" --no-edit

Penjelasan Parameter:

  • --author="...": Menentukan nama dan email author baru secara eksplisit.

  • --no-edit: Memberitahu Git untuk tidak mengubah commit message yang sudah ada, sehingga kamu tidak perlu membuka text editor lagi hanya untuk menyimpan pesan commit.

Setelah commit tersebut berhasil diperbarui, lanjutkan proses rebase ke commit berikutnya dengan perintah:

Bash
git rebase --continue

Git akan melanjutkan rebase dan berhenti kembali di commit kedua yang kamu tandai sebagai edit (8a2b1c3). Ulangi langkah yang sama:

Bash
# Ganti author di commit kedua
git commit --amend --author="Anak Informatika <redaksi@anakinformatika.com>" --no-edit

# Lanjutkan ke commit berikutnya
git rebase --continue

Git akan berhenti lagi di commit ketiga (c7d8e9f). Lakukan hal yang sama sekali lagi:

Bash
# Ganti author di commit ketiga
git commit --amend --author="Anak Informatika <redaksi@anakinformatika.com>" --no-edit

# Lanjutkan rebase
git rebase --continue

Karena commit keempat (f0a1b2c) tetap ditandai sebagai pick, Git akan melewatinya tanpa berhenti dan menyelesaikan seluruh proses rebase. Kamu akan melihat output penutup:

Plaintext
Successfully rebased and updated refs/heads/main.

Langkah 5: Verifikasi Hasil Perubahan

Setelah proses rebase selesai, saatnya kita memeriksa apakah semua commit sudah menggunakan author yang benar. Jalankan perintah git log seperti di awal:

Bash
git log --pretty=format:"%h %an <%ae> %s" --reverse

Output kamu sekarang akan terlihat seperti ini:

Plaintext
a1b2c3d Anak Informatika <redaksi@anakinformatika.com> feat: Initial project setup
e4f5g6h Anak Informatika <redaksi@anakinformatika.com> feat: Implement feature A
i7j8k9l Anak Informatika <redaksi@anakinformatika.com> fix: Resolve bug B
m0n1o2p Anak Informatika <redaksi@anakinformatika.com> feat: Implement feature C

Selamat! Semua commit sekarang sudah memiliki nama dan email author yang seragam, rapi, dan akurat. Perhatikan juga bahwa hash SHA-1 dari commit-commit tersebut telah berubah (misalnya dari e1f3a2f menjadi a1b2c3d), yang menandakan bahwa Git telah berhasil menulis ulang history-nya secara bersih.

Alternative: Mengubah Puluhan/Ratusan Commit Sekaligus

Cara rebase interaktif di atas sangat cocok jika kamu hanya ingin mengubah beberapa commit spesifik. Namun, bagaimana jika kamu punya puluhan atau ratusan commit yang author-nya salah? Mengetik git rebase --continue berulang kali tentu menyita waktu.

Untuk kasus massal seperti ini, kamu bisa memanfaatkan utilitas git-filter-repo (pengganti resmi git filter-branch yang sudah deprecated).

  1. Instal git-filter-repo (butuh Python):

    Bash
    pip install git-filter-repo
    
  2. Jalankan script pengganti mail/author: Buat file teks, misalnya mailmap.txt, lalu isi dengan format:

    Plaintext
    Anak Informatika <redaksi@anakinformatika.com> Dev Testing <dev.testing@example.com>
    Anak Informatika <redaksi@anakinformatika.com> Guest User <guest@example.com>
    
  3. Eksekusi pembersihan:

    Bash
    git filter-repo --mailmap mailmap.txt
    

    Perintah ini akan secara otomatis memindai seluruh history dan mengganti nama/email lama ke yang baru dalam hitungan detik!

Bagaimana Jika Commit Sudah Di-push ke Remote?

Jika kamu merapikan history pada branch lokal yang sudah terhubung ke remote repository (seperti GitHub atau GitLab), Git akan menolak git push biasa karena history lokal dan remote sudah berbeda (divergent history).

Untuk menyinkronkannya, kamu harus melakukan force push:

Bash
git push origin main --force-with-lease

💡 Tips Keamanan: Selalu prioritaskan --force-with-lease dibandingkan --force biasa. --force-with-lease akan menolak proses push jika ada anggota tim lain yang sempat melakukan commit baru di remote repository tersebut, sehingga mencegah kode rekan timmu tertimpa secara tidak sengaja.

Kesimpulan

Merapikan Git history bukan sekadar masalah estetika, melainkan investasi pada akuntabilitas dan profesionalisme proyek software-mu. Dengan memanfaatkan git rebase -i beserta git commit --amend --author, kamu bisa mengoreksi kekeliruan metadata author tanpa merusak perubahan kode di dalamnya.

Ingat golden rule-nya: Hati-hati saat mereset atau mereset history di shared branch, dan selalu komunikasikan dengan tim sebelum melakukan force push.

Semoga panduan ini membantu kamu menjaga repository tetap bersinar dan rapi! Ada pertanyaan atau kendala saat coba rebase? Tulis di kolom komentar ya! Sampai jumpa di artikel AnakInformatika berikutnya! 🚀