Menyelesaikan Konflik Git dengan Claude Code secara Aman
Workflow aman untuk konflik Git dengan Claude Code: prompt, kasus nyata, jebakan, test, dan aturan tim.
Menyelesaikan konflik Git bukan sekadar menghapus <<<<<<<, =======, dan >>>>>>>. Marker itu hanya menunjukkan bagian yang tidak bisa diputuskan Git secara otomatis. Pekerjaan sebenarnya adalah menjaga niat dari dua branch: satu branch mungkin memperbaiki authorization, sementara branch lain menambah screen baru, API call, dan test.
Claude Code membantu karena bisa membaca file konflik, memeriksa kode sekitar, menjalankan perintah Git, memperbarui test, dan menjelaskan diff akhir. Namun keputusan tetap harus dipegang developer. Prompt yang terlalu umum seperti “fix all conflicts” bisa menghasilkan kode yang compile, tetapi menghapus aturan bisnis atau membuat validasi ganda.
Workflow yang paling stabil adalah: manusia menulis prioritas dan batasan, Claude Code melakukan edit mekanis, lalu manusia memeriksa diff, test, dan behavior. Ini pola yang dipakai di project ClaudeCodeLab.
Peta Workflow
perubahan dari main atau release
|
v
Git melaporkan file belum merge
|
v
Claude Code menyelesaikan dengan policy tertulis
|
v
manusia memeriksa diff, test, dan behavior
|
v
commit state yang sudah selesai
Untuk mode non-interaktif, dokumentasi resmi Claude Code CLI reference menjelaskan pola claude -p "query". Untuk otomatisasi check, gunakan Claude Code hooks reference dan Claude Code settings. Di sisi Git, Git rerere adalah fitur resmi untuk memakai ulang resolusi yang pernah direkam.
Cek State Terlebih Dahulu
Sebelum meminta Claude Code mengedit, pastikan working tree tidak berisi perubahan lokal yang tidak terkait.
git status --short
git branch --show-current
git diff --name-only --diff-filter=U
Perintah terakhir hanya menampilkan file yang masih unresolved. Baca daftar itu sendiri. Jika ada file yang tidak kamu kenal, pahami penyebabnya sebelum AI mengubah kode.
Masukkan empat hal ini ke prompt:
| Pertanyaan | Contoh policy |
|---|---|
| Sisi mana yang prioritas | Pertahankan security fix dari main dan UI baru dari feature |
| Apa yang boleh diedit | Hanya file unresolved dan test yang langsung terkait |
| Bagaimana file generated | Regenerate lockfile dan generated code, jangan merge manual |
| Kapan selesai | Tidak ada marker, git diff --check bersih, test pass, keputusan diringkas |
Policy singkat ini membuat output Claude Code lebih mudah diaudit.
Kasus 1: Merge main ke feature branch
Kasus paling umum adalah feature branch yang tertinggal beberapa hari dan perlu mengambil perubahan terbaru dari main.
git fetch origin
git merge origin/main
cat > /tmp/claude-conflict-plan.md <<'PROMPT'
Selesaikan Git merge conflict saat ini.
Konteks:
- Branch saat ini adalah feature branch.
- Pertahankan security fix dan perubahan type dari origin/main.
- Pertahankan screen baru, API call, dan test dari feature branch.
- Kerjakan hanya file dari git diff --name-only --diff-filter=U.
Tugas:
1. Jelaskan singkat kenapa tiap file konflik.
2. Hapus conflict marker dan integrasikan niat kedua sisi.
3. Update hanya test yang langsung terkait jika perlu.
4. Jalankan git diff --check.
5. Ringkas keputusan dan command yang dijalankan.
Jangan:
- Melakukan refactor yang tidak terkait.
- Membuang salah satu sisi tanpa penjelasan.
- Mengedit package-lock.json secara manual.
PROMPT
claude -p "$(cat /tmp/claude-conflict-plan.md)"
git diff --check
npm test
Yang penting bukan kalimat persisnya, tetapi prioritas, scope, aturan file generated, dan kriteria selesai. Dengan begitu review menjadi jelas.
Pengalaman gagal yang pernah terjadi: main menambah aturan authorization yang lebih ketat, sementara feature menambah cabang UI. Prompt yang hanya bilang “pertahankan keduanya” membuat UI terlihat, tetapi API tetap mengembalikan 403. Sejak itu saya selalu menulis bahwa security dan authorization harus dipertahankan, lalu UI/API consistency harus dicek.
Kasus 2: Rebase satu langkah sekali
Konflik saat git rebase lebih sensitif daripada merge biasa, karena Git berhenti di setiap commit. Selain itu, ours dan theirs bisa terasa terbalik saat rebase. Jangan jalankan git checkout --ours sebelum memahami diff.
git rebase origin/main
cat > /tmp/claude-rebase-step.md <<'PROMPT'
Selesaikan hanya konflik current step dari rebase ini.
Pertama:
- Konfirmasi dengan git status bahwa kita sedang rebase.
- List file unresolved dengan git diff --name-only --diff-filter=U.
- Pahami niat commit yang sedang replay dari git log terbaru.
- Integrasikan niat commit itu dengan behavior main saat ini.
Batasan:
- Jangan jalankan git rebase --continue.
- Berhenti setelah resolve dan git add.
- Jangan edit file yang tidak terkait.
- Jika keputusan ambigu, jelaskan opsi, jangan menebak.
PROMPT
claude -p "$(cat /tmp/claude-rebase-step.md)"
git diff --check
npm test
git rebase --continue
Claude Code bisa diminta lanjut otomatis, tetapi untuk pemula lebih aman berhenti di setiap step. Jika resolusi salah lewat beberapa commit, penyebabnya lebih sulit dilacak.
Kasus 3: Lockfile dan generated code
package-lock.json, pnpm-lock.yaml, code generated dari OpenAPI atau Prisma, dan snapshot besar tidak cocok di-merge baris demi baris. Selesaikan source file dulu, lalu generate ulang output.
cat > /tmp/claude-lockfile-policy.md <<'PROMPT'
Selesaikan konflik lockfile atau generated file.
Policy:
- Selesaikan source file yang diedit manusia dulu, seperti package.json, schema, atau OpenAPI.
- Jangan merge package-lock.json secara manual.
- Setelah dependency diputuskan, regenerate dengan npm install.
- Untuk generated code, selesaikan source schema lalu generate ulang.
- Jelaskan kenapa diff hasil regenerate memang expected.
Boleh menjalankan:
- npm install
- npm test
- npm run lint
PROMPT
claude -p "$(cat /tmp/claude-lockfile-policy.md)"
npm install
npm test
git add package.json package-lock.json
Jebakan umum adalah mempertahankan dua dependency di package.json, tetapi mengambil lockfile dari satu sisi saja. Bisa jalan di lokal, lalu gagal di CI karena dependency resolution berbeda. Tulis aturan: source dulu, output generated setelahnya.
Kasus 4: Analisis penyebab konflik
Setelah konflik selesai, gunakan momen itu untuk mengurangi konflik berikutnya. Jika route, permission map, schema, atau dependency sering bertabrakan, kemungkinan PR terlalu besar atau ownership kurang jelas.
cat > /tmp/claude-conflict-retro.md <<'PROMPT'
Analisis kenapa Git conflict ini terjadi.
Investigasi:
- List file dengan git diff --name-only --diff-filter=U.
- Gunakan git log --oneline --all -- <file> untuk melihat history dua branch.
- Klasifikasikan penyebab: shared ownership, PR terlalu besar, generated noise, atau rule hilang.
Output:
- Ringkasan penyebab dalam tiga baris.
- Rule yang perlu ditambahkan ke CLAUDE.md.
- Apakah lebih efektif split PR, koordinasi owner, atau tambah test.
PROMPT
claude -p "$(cat /tmp/claude-conflict-retro.md)"
Jika src/routes.ts konflik setiap minggu, mungkin route registration perlu dipisah per feature. Jika package.json sering konflik, perubahan dependency sebaiknya dipisah menjadi PR khusus.
Check dan Aturan Tim
Setelah edit, minimal jalankan:
git diff --check
git diff --name-only --diff-filter=U
npm test
Tambahkan typecheck, lint, atau E2E saat konflik menyentuh kontrak API, routing, billing, atau authorization. Check berulang bisa diotomasi dengan hooks. Lihat Panduan Claude Code Hooks.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash(git merge*)|Bash(git rebase*)",
"hooks": [
{
"type": "command",
"command": "git diff --check && npm test"
}
]
}
]
}
}
Dokumentasikan juga policy di CLAUDE.md, karena file itu menjadi project memory untuk Claude Code. Untuk struktur, baca CLAUDE.md best practices dan panduan kolaborasi tim.
## Git conflict policy
- Pertahankan security fix, authorization check, dan pencegahan data loss secara default.
- Cek UI, API, schema, dan test sebagai satu kesatuan.
- Regenerate lockfile dan generated code, jangan edit manual.
- Saat rebase, manusia review diff sebelum git rebase --continue.
- Jika keputusan tidak jelas, tampilkan opsi dan jangan membuang salah satu sisi diam-diam.
Jebakan dan Hasil Uji
Jangan menghafal ours dan theirs sebagai label tetap; saat rebase keduanya bisa membingungkan. “Pertahankan keduanya” juga tidak selalu benar: dua validasi, dua redirect, atau dua feature flag bisa menciptakan behavior ganda. Test yang pass tetap perlu review manual jika konflik menyentuh authentication, billing, migration, atau operasi delete.
Dalam uji Masa pada project TypeScript dengan sekitar 15 file konflik, prompt yang vague memperbaiki syntax tetapi melewatkan update test terkait. Dengan policy seperti artikel ini, Claude Code menghasilkan diff lebih kecil, menjelaskan keputusan, dan mempercepat review.
Mulai dari feature branch kecil: list file unresolved, berikan policy jelas, jalankan test, lalu review diff sendiri. Setelah workflow stabil, pindahkan aturan berulang ke hooks dan CLAUDE.md agar tim punya proses konflik yang konsisten.
PDF gratis: cheatsheet Claude Code
Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.
Kami menjaga datamu dan tidak mengirim spam.
Tentang penulis
Masa
Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.
Artikel terkait
Permission safety ladder Claude Code: perluas akses tanpa kehilangan kontrol
Naik dari read-only ke edit terbatas, command bukti, dan cek deploy dengan kontrol yang jelas.
Claude Code Small PR Proof Pack: perubahan kecil yang mudah direview
Paket bukti untuk PR Claude Code: diff, check, URL publik, jalur CTA, dan rollback.
Review gate Claude Code sebelum commit: diff, test, URL publik, dan CTA
Cara memakai Claude Code sebelum commit: diff scope, build, URL publik, link Gumroad, CTA konsultasi, missing test, dan file tidak terkait.