Lewati ke konten utama

Penjelasan Git Diff: Panduan Lengkap dengan Contoh

Pelajari cara menggunakan git diff untuk melacak perubahan kode secara efektif, dari perbandingan dasar hingga teknik lanjutan. Temukan alat visualisasi, perintah khusus, dan alur kerja untuk manajemen kode yang lebih baik.
Diperbarui 28 Sep 2026  · 12 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Git diff adalah jendela Anda untuk melihat perubahan yang terjadi di repositori kode. Pada dasarnya, ini adalah perintah yang menampilkan perbedaan antara berbagai keadaan berkas Anda—baik itu membandingkan pekerjaan Anda saat ini dengan yang sudah Anda stage, atau membandingkan perubahan antar branch dan commit. Anggap saja ini cara Git menjawab pertanyaan, “Apa yang berubah?” Saat Anda menjalankan git diff, Git menganalisis konten berkas baris demi baris, mengidentifikasi apa yang ditambahkan, dihapus, atau diubah, lalu menyajikan informasi ini dalam format standar yang menyoroti dengan tepat apa yang berubah dan di mana.

Git diff membantu pengembang memastikan kualitas kode dengan memberikan tampilan jelas atas modifikasi sebelum di-commit. Di sini, kami akan membahas cara menggunakan perintah penting ini secara efektif, dari perbandingan dasar hingga teknik lanjutan yang akan meningkatkan alur kerja pengembangan dan kolaborasi tim Anda.

Prasyarat

Untuk mengikuti tutorial ini, Anda sebaiknya sudah memahami konsep Git berikut:

  • Alur kerja Git dasar (init, add, commit)
  • Repositori Git dan strukturnya
  • Branch dan cara kerjanya
  • Commit dan riwayat commit
  • Staging area (index)

Jika Anda perlu menyegarkan kembali konsep-konsep ini, sumber berikut akan membantu:

Anda memerlukan Git terpasang di sistem Anda untuk mengikuti contoh. Semua perintah dapat dijalankan di terminal atau command prompt.

Mengapa Git Diff Penting bagi Pengembang

Setiap pengembang perlu mengetahui apa yang berubah di kodenya, baik bekerja sendiri maupun dalam tim beranggotakan ratusan orang. Tanpa git diff, Anda akan menebak-nebak baris mana yang diubah, sehingga penelusuran masalah dan kolaborasi menjadi nyaris mustahil.

Git diff penting untuk manajemen perubahan dan menjadi fondasi dalam membangun perangkat lunak berkualitas melalui proses review yang efektif. Saat menelaah perubahan, git diff memberikan konteks yang dibutuhkan untuk memahami bukan hanya apa yang berubah, tetapi juga mengapa perubahan tersebut penting. 

Visibilitas langsung terhadap evolusi kode ini membantu tim menjaga standar dan mencegah bug masuk ke produksi.

Seiring proyek bertambah kompleks, git diff menjadi sangat tak tergantikan karena beberapa alasan utama:

  • Verifikasi perubahan: Konfirmasi secara tepat apa yang akan Anda commit, mencegah masuknya kode debugging atau perubahan tak terkait secara tidak sengaja
  • Transfer pengetahuan: Memahami apa yang dilakukan rekan tim tanpa harus membaca seluruh berkas
  • Penyelesaian konflik: Mengidentifikasi tepat di mana dan bagaimana perubahan bertabrakan saat merge
  • Analisis historis: Melacak kapan perubahan spesifik diperkenalkan untuk mencari bug atau memahami evolusi fitur
  • Code review terarah: Memusatkan perhatian pada bagian kode yang benar-benar berubah, menghemat waktu dan meningkatkan kualitas review

Untuk menggunakan git diff secara efektif, perlu memahami arsitektur dasar yang memungkinkan perbandingan ini — model “Three-Tree” Git.

Arsitektur Three-Tree Git

Untuk memahami git diff, pertama-tama Anda perlu memahami arsitektur dasar Git “three-tree”. Meski namanya begitu, ini bukan pohon nyata di sistem berkas, melainkan tiga keadaan berbeda tempat kode Anda berada.

Anggap ketiga keadaan ini sebagai tiga versi berbeda proyek Anda yang dilacak Git secara bersamaan: Working Directory (berkas aktual Anda), Staging Area (atau index, tempat perubahan dipersiapkan untuk di-commit), dan Repository (riwayat commit proyek Anda yang disimpan di direktori .git).

Arsitektur Three-Tree Git yang menampilkan Working Directory, Staging Area, dan Repository

Sumber: Hashnode

Working Directory berisi berkas yang sedang Anda edit — di sinilah Anda menulis kode, membuat perubahan, dan menguji pekerjaan Anda. Staging Area bertindak sebagai zona persiapan tempat Anda memilih perubahan mana yang harus disertakan dalam commit berikutnya. Anda bisa menganggapnya seperti dermaga pemuatan tempat paket (perubahan Anda) diatur sebelum dikirim.

Terakhir, Repository menyimpan riwayat lengkap proyek Anda sebagai rangkaian commit — snapshot kode pada titik waktu tertentu — yang terhubung membentuk rantai historis.

Git diff bekerja dengan membandingkan ketiga keadaan ini dalam berbagai kombinasi. Saat Anda menjalankan git diff tanpa argumen, ia membandingkan Working Directory dengan Staging Area, menampilkan perubahan yang telah Anda buat tetapi belum di-stage. 

Menggunakan git diff --staged membandingkan Staging Area dengan commit terakhir, menampilkan apa yang akan disertakan dalam commit berikutnya. 

Dan git diff HEAD membandingkan Working Directory Anda langsung dengan commit terakhir, menampilkan semua perubahan yang belum di-commit terlepas dari status staging.

Titik-titik perbandingan ini menjadi dasar untuk semua operasi diff di Git:

  • Working Directory ↔ Staging Area: Perubahan apa yang telah saya buat tetapi belum di-stage? (git diff)
  • Staging Area ↔ Repository: Perubahan apa yang sudah saya stage dan akan di-commit berikutnya? (git diff --staged)
  • Working Directory ↔ Repository: Apa total perbedaan antara berkas kerja saya dan commit terakhir? (git diff HEAD)
  • Antar Commit: Bagaimana kode berevolusi antara titik-titik tertentu dalam sejarah? (git diff commit1-hash commit2-hash)

Memahami arsitektur ini memberi Anda pola pikir yang diperlukan untuk menggunakan git diff secara efektif guna menandai dengan tepat apa yang berubah, di mana, dan kapan dalam codebase Anda.

Dengan pemahaman arsitektur ini, sekarang kita dapat menjelajahi cara menggunakan perintah git diff dalam praktik untuk memperoleh wawasan tentang evolusi kode Anda di ketiga keadaan tersebut.

Penggunaan Dasar Git Diff

Mari buat sebuah proyek analisis data contoh untuk mendemonstrasikan git diff secara langsung. Kita akan menyiapkan repositori kecil berisi skrip Python, data CSV, dan berkas teks yang dapat kita ubah sepanjang tutorial ini.

# Create and initialize our project
mkdir data-analysis-project
cd data-analysis-project
git init

# Create initial files
echo "# Data Analysis Project\nA sample project to demonstrate git diff functionality." > README.md
echo "import pandas as pd\n\ndef load_data(filename):\n return pd.read_csv(filename)\n\ndef analyze_data(data):\n return data.describe()" > analysis.py
echo "id,name,value\n1,alpha,10\n2,beta,20\n3,gamma,30" > data.csv
echo "DEBUG=False\nDATABASE_PATH=./data/" > config.txt
echo "def normalize_data(data):\n return (data - data.min()) / (data.max() - data.min())" > utils.py

# Make our first commit
git add .
git commit -m "Initial commit with basic project structure"

# Check the directory structure
> tree

.
├── README.md
├── analysis.py
├── config.txt
├── data.csv
└── utils.py

Proyek kita sekarang memiliki lima berkas di bawah kendali versi, memberi kita dasar untuk mendemonstrasikan berbagai skenario diff. Seiring progres, kita akan memodifikasi berkas-berkas ini untuk menunjukkan bagaimana git diff mengungkap perubahan dalam konteks yang berbeda.

Memahami hasil git diff

Saat Anda menjalankan perintah git diff, keluarannya mengikuti format standar yang dirancang untuk menunjukkan dengan jelas apa yang berubah. Mari ubah berkas analysis.py untuk melihat diff secara langsung:

# Update analysis.py with a new function
echo "import pandas as pd\n\ndef load_data(filename):\n return pd.read_csv(filename)\n\ndef analyze_data(data):\n return data.describe()\n\ndef visualize_data(data):\n return data.plot(kind='bar')" > analysis.py

Sekarang mari kita lihat git diff yang dihasilkan:

git diff

Anda akan melihat keluaran yang mirip dengan ini:

Keluaran contoh perintah git diff

Catatan: Untuk keluar dari tampilan keluaran git diff, tekan “q” di terminal Anda.

Mari uraikan keluarannya:

  1. Header (diff --git a/analysis.py b/analysis.py) menunjukkan berkas yang dibandingkan, yaitu analysis.py
  2. Metadata berkas (index db0e049..a7a7ab0 100644) menampilkan pengenal internal Git untuk versi sebelum dan sesudah
  3. Penanda berkas (--- a/analysis.py and +++ b/analysis.py) menunjukkan berkas “sebelum” dan “sesudah”
  4. Hunk header (@@ -5,3 +5,6 @@) menunjukkan baris mana yang terdampak. Notasi ini dapat diartikan sebagai:
  • -5,3 berarti mulai dari baris 5 di berkas asli, 3 baris ditampilkan dalam diff
  • +5,6 berarti mulai dari baris 5 di berkas yang dimodifikasi, 6 baris ditampilkan dalam diff
  • Perbedaan antara angka-angka ini menunjukkan bahwa 3 baris telah ditambahkan

5. Perubahan konten dengan baris yang diawali + menunjukkan penambahan

Pada berkas yang lebih besar, git diff mengelompokkan perubahan menjadi “hunk” — bagian berkas yang berisi perubahan. Setiap hunk memiliki header sendiri dengan nomor baris untuk membantu Anda menemukan perubahan di berkas.

Membandingkan working directory dan staging area

Menjalankan git diff tanpa argumen membandingkan Working Directory (keadaan berkas saat ini) dengan Staging Area (perubahan yang siap di-commit). Ini berguna untuk meninjau apa yang telah Anda ubah tetapi belum Anda siapkan untuk commit berikutnya.

Mari modifikasi beberapa berkas untuk mendemonstrasikan:

# Update README.md
echo "# Data Analysis Project\nA sample project to demonstrate git diff functionality.\n\n## Installation\nRun \pip install -r requirements.txt" > README.md

# Update data.csv
echo "id,name,value\n1,alpha,10\n2,beta,20\n3,gamma,30\n4,delta,40" > data.csv

Sekarang mari kita stage hanya perubahan README.md:

git add README.md

Menjalankan git diff sekarang akan menampilkan hanya perubahan yang belum di-stage pada data.csv dan berkas analysis.py di atas:

Keluaran contoh untuk perintah git diff

Ini membantu Anda fokus pada apa yang belum Anda stage. Jika Anda ingin melihat apa yang sudah di-stage:

git diff --staged # atau git diff --cached (keduanya sinonim)

Keluaran untuk perintah git diff

Ini akan menampilkan perubahan pada README.md yang sudah di-stage dan siap di-commit. Alur kerja ini penting untuk membangun commit yang bersih dan logis. Anda dapat men-stage bagian pekerjaan yang selaras, meninjau staged diff untuk memastikan itu satu kesatuan perubahan yang koheren, lalu melakukan commit.

Membandingkan staging area dan commit terakhir

Perintah git diff --staged membandingkan Staging Area Anda dengan commit terakhir. Ini menunjukkan dengan tepat apa yang akan disertakan dalam commit berikutnya jika Anda menjalankan git commit sekarang.

Mari kita stage perubahan data.csv dan meninjau apa yang sudah di-stage:

git add data.csv
git diff --staged

Keluaran sekarang akan menampilkan perubahan pada README.md dan data.csv, karena keduanya telah di-stage. Langkah peninjauan ini krusial sebelum commit — ini bertindak sebagai garis pertahanan terakhir Anda terhadap commit perubahan yang tidak diinginkan.

Alur kerja umum mungkin terlihat seperti ini:

  1. Membuat perubahan pada beberapa berkas
  2. Menjalankan git diff untuk meninjau semua perubahan
  3. Menggunakan git add <file> secara selektif untuk men-stage kelompok perubahan yang logis
  4. Menjalankan git diff --staged untuk memverifikasi apa yang akan di-commit
  5. Commit perubahan yang sudah di-stage dengan git commit -m "Your message"
  6. Ulangi untuk kelompok perubahan logis lainnya

Pendekatan metodis ini membantu menjaga riwayat commit yang bersih dan bermakna, sehingga lebih mudah memahami bagaimana proyek Anda berkembang dan menemukan di mana masalah mungkin diperkenalkan. Seiring pengalaman bertambah, perintah-perintah diff ini akan menjadi kebiasaan, menjadi pendamping setia dalam proses pengembangan.

Mari lakukan commit sebelum berlanjut ke tahap berikutnya:

# data.csv and README.md are to be committed
git commit -m "Modify data.csv and README.md files"

# Stage and commit analysis.py
git add analysis.py
git diff --staged  # Review the changes one more time
git commit -m "Add a new function to analysis.py"

Teknik Menengah Git Diff

Sekarang kita memahami dasar git diff, mari jelajahi teknik yang lebih kuat untuk meningkatkan kemampuan Anda melacak dan menganalisis perubahan di proyek. Kita akan terus bekerja dengan proyek analisis data untuk mendemonstrasikan konsep menengah ini.

Membandingkan antar referensi berbeda

Git dibangun di atas konsep referensi — penunjuk ke keadaan tertentu dari kode Anda. Referensi ini mencakup branch, commit, dan tag. Perintah git diff dapat membandingkan dua referensi mana pun untuk menunjukkan apa yang berubah di antara keduanya.

Mari buat branch baru untuk mengembangkan sebuah fitur dan lakukan beberapa perubahan:

# Create and switch to a new branch
git checkout -b feature/advanced-analytics

# Modify the analysis.py file with a new function
echo "import pandas as pd
import numpy as np

def load_data(filename):
   return pd.read_csv(filename)

def analyze_data(data):
   return data.describe()

def visualize_data(data):
   return data.plot(kind='bar')

def perform_advanced_analysis(data):
   """Performs advanced statistical analysis on the dataset"""
   results = {}
   results['correlation'] = data.corr()
   results['skew'] = data.skew()
   return results" > analysis.py

# Commit the changes
git add analysis.py
git commit -m "Add advanced analysis function"

Sekarang kita dapat membandingkan branch fitur kita dengan branch utama:

git diff main feature/advanced-analytics

Perintah ini menampilkan semua perbedaan antara kedua branch — setiap berkas yang dimodifikasi, ditambahkan, atau dihapus. Anda akan melihat perubahan yang kita buat pada analysis.py, termasuk impor baru dan fungsinya (tekan enter beberapa kali karena diff penuh terpotong di terminal).

Untuk membandingkan dengan commit tertentu, Anda dapat menggunakan hash commit:

git log --oneline  # Find the commit hash you want to compare with

Keluaran perintah git log --oneline

git diff 7b3105e  # Replace 7b3105e with the actual commit hash you want to compare

Kemampuan perbandingan ini menjadi sangat berguna ketika:

  • Mempersiapkan code review dengan melihat semua perubahan di branch fitur
  • Memeriksa perubahan apa yang akan diperkenalkan branch rekan sebelum merge
  • Memahami bagaimana codebase berkembang antar rilis atau versi

Membandingkan berkas tertentu

Saat bekerja dengan repositori besar, Anda sering ingin fokus pada perubahan pada berkas atau direktori tertentu alih-alih melihat semua perbedaan. Git diff memudahkan ini dengan memungkinkan Anda menentukan path.

Mari lakukan perubahan pada beberapa berkas:

# Update config.txt
echo "DEBUG=True
DATABASE_PATH=./data/
LOG_LEVEL=INFO" > config.txt

# Update utils.py
echo "def normalize_data(data):
   return (data - data.min()) / (data.max() - data.min())

def clean_data(data):
   return data.dropna()" > utils.py

Untuk melihat perubahan hanya pada berkas konfigurasi:

git diff config.txt

Atau untuk membandingkan berkas tertentu antar branch:

# Compare analysis.py file between main and feature/advanced-analytics branches
git diff main feature/advanced-analytics -- analysis.py

Tanda -- pada perintah di atas membantu Git membedakan antara referensi dan path berkas. Ini sangat berguna ketika:

  • Bekerja di repositori dengan banyak berkas tetapi fokus pada komponen tertentu (yang sering terjadi)
  • Memeriksa bagaimana konfigurasi berubah lintas branch
  • Meninjau hanya berkas paling kritis dalam kumpulan perubahan besar

Opsi diff kontekstual

Git diff menyediakan beberapa opsi untuk menyesuaikan cara perbedaan ditampilkan, sehingga lebih mudah fokus pada perubahan yang bermakna.

Misalnya, saat berurusan dengan perubahan format kode, perbedaan whitespace bisa menutupi perubahan semantik penting. Mari demonstrasikan dengan perubahan format:

# Make a whitespace change to analysis.py
sed -i '' 's/    return/  return/g' analysis.py  # Reduce indentation

Sekarang, membandingkan dengan git diff standar akan menampilkan perubahan whitespace (perhatikan bagaimana pernyataan return tidak sejajar):

git diff analysis.py

# OUT:
--- a/analysis.py
+++ b/analysis.py
@@ -2,17 +2,17 @@ import pandas as pd
import numpy as np

def load_data(filename):
-    return pd.read_csv(filename)
+  return pd.read_csv(filename)

def analyze_data(data):
-    return data.describe()
+  return data.describe()

def visualize_data(data):
-    return data.plot(kind='bar')
+  return data.plot(kind='bar')

def perform_advanced_analysis(data):
    Performs advanced statistical analysis on the dataset
    results = {}
    results['correlation'] = data.corr()
    results['skew'] = data.skew()
-    return results
+  return results

Namun kita bisa mengabaikan perubahan whitespace (ini tidak menampilkan perubahan karena kita hanya menghapus whitespace):

git diff -w analysis.py  # or --ignore-all-space

Opsi berguna lainnya adalah mengatur baris konteks — baris tidak berubah yang ditampilkan di sekitar modifikasi:

git diff -U1 analysis.py  # Show only 1 line of context (default is 3)
git diff -U5 analysis.py  # Show 5 lines of context

Opsi kontekstual ini sangat bernilai ketika:

  • Meninjau kode yang telah melalui pemformatan otomatis
  • Fokus pada perubahan fungsional alih-alih perubahan gaya
  • Membutuhkan lebih banyak konteks untuk memahami perubahan tertentu
  • Bekerja dengan berkas besar di mana konteks default akan menghasilkan keluaran terlalu banyak

Dengan menguasai teknik tingkat menengah ini, Anda akan memiliki kontrol lebih halus atas cara meninjau dan memahami perubahan dalam codebase, membuat alur kerja pengembangan lebih efisien dan code review lebih efektif.

Mari commit perubahan terbaru sebelum kita beralih ke aplikasi git diff tingkat lanjut:

git add .
git commit -m "Modify analysis.py, config.txt, and utils.py"

Aplikasi Lanjutan Git Diff

Bertumpu pada pemahaman teknik menengah git diff, mari jelajahi beberapa aplikasi lanjutan yang akan meningkatkan keterampilan Git Anda ke tingkat berikutnya. Teknik-teknik ini sangat berguna saat bekerja pada codebase kompleks atau berkolaborasi dengan tim besar.

Menggunakan alat diff eksternal

Meskipun diff bawaan Git sudah kuat, terkadang alat diff visual memberikan kejelasan lebih baik, terutama untuk perubahan kompleks. Git memungkinkan Anda mengonfigurasi alat eksternal untuk meningkatkan pengalaman diff.

Mari konfigurasikan alat diff visual populer. Kita akan menggunakan VSCode sebagai contoh, tetapi konfigurasi serupa berlaku untuk alat seperti Beyond Compare, Meld, atau KDiff3:

# Configure Git to use VSCode as the diff tool (project-specific)
git config diff.tool vscode
git config difftool.vscode.cmd "code --wait --diff \$LOCAL \$REMOTE"

# To use other popular tools, you could use:
# For Beyond Compare (project-specific):
git config diff.tool bc3
git config difftool.bc3.path "/path/to/beyond/compare"

# Installation commands:
# For Beyond Compare:
# On macOS: brew install --cask beyond-compare
# On Ubuntu: sudo apt-get install beyond-compare
# On Windows: Download from https://www.scootersoftware.com/download.php

# Note: To apply these settings globally instead of just the current project,
# add the --global flag to each command, for example:
# git config --global diff.tool vscode

Sekarang alih-alih menggunakan git diff, Anda bisa menggunakan:

git difftool main feature/advanced-analytics

Ini akan membuka alat diff visual yang Anda konfigurasikan untuk menampilkan perubahan. Berikut tampilan Beyond Compare:

Antarmuka alat git diff Beyond Compare

Alat diff visual memberikan beberapa keunggulan:

  1. Perbandingan berdampingan yang memudahkan melihat konteks
  2. Highlight sintaks yang selaras dengan preferensi editor Anda
  3. Navigasi lanjutan antar perubahan
  4. Kemampuan mengedit berkas langsung saat meninjau perbedaan

Saat meninjau perubahan besar atau berkas dengan struktur kompleks (seperti JSON atau XML bertingkat), alat diff visual dapat sangat meningkatkan pemahaman dan efisiensi.

Perintah diff khusus

Git menawarkan perintah diff khusus yang memberi Anda kontrol lebih rinci untuk kasus penggunaan spesifik. Mari jelajahi beberapa perintah bertenaga ini:

git diff-tree memeriksa perbedaan antara objek tree (direktori):

# Get the hash of the last two commits
LAST_COMMIT=$(git rev-parse HEAD)
PREV_COMMIT=$(git rev-parse HEAD~1)

# Show changes in the last commit
git diff-tree --patch $PREV_COMMIT $LAST_COMMIT

git diff-index membandingkan working tree dengan indeks (staging area) atau sebuah tree:

# Compare working directory with the index
git diff-index --patch HEAD

git diff-index sangat berguna untuk scripting dan otomatisasi. Ini memungkinkan Anda memeriksa secara terprogram perubahan apa yang akan disertakan dalam commit berikutnya, sehingga bernilai untuk hook pra-commit dan skrip validasi.

Misalnya, Anda dapat menggunakannya dalam pipeline CI/CD untuk memverifikasi bahwa file tertentu tidak diubah atau memastikan perubahan konfigurasi mengikuti pola tertentu sebelum mengizinkan commit.

git diff-files menampilkan perubahan antara file di working directory dan indeks:

# Check differences for specific files
git diff-files --patch config.txt

Perintah khusus ini sangat berguna untuk:

  • Membuat alur kerja dan skrip Git kustom
  • Men-debug masalah dengan internal Git
  • Melakukan analisis terarah terhadap status repositori
  • Membangun alat otomatisasi yang berinteraksi dengan Git

Menganalisis riwayat kode

Salah satu penerapan terkuat git diff adalah menganalisis bagaimana kode berkembang dari waktu ke waktu, yang bisa krusial untuk debugging atau memahami pengembangan fitur.

Mari kita periksa commit tertentu menggunakan notasi khusus ^!:

# Get the hash of our advanced analytics commit
ANALYTICS_COMMIT=$(git log --oneline | grep "advanced analysis" | cut -d ' ' -f 1)

# Show only changes introduced in that specific commit
git diff $ANALYTICS_COMMIT^!

Sintaks ^! adalah singkatan untuk membandingkan sebuah commit dengan parent-nya, menampilkan dengan tepat apa yang berubah hanya pada commit itu.

Untuk menelusuri bagaimana file tertentu berkembang seiring waktu:

# Analyze how analysis.py changed over the last 3 commits
git log -p -3 analysis.py

Saat memburu bug, Anda dapat menggunakan git diff bersama git bisect:

# Add a bug to simulate a regression
echo "import pandas as pd
import numpy as np

def load_data(filename):
   # Bug: accidentally returning None instead of the data
   pd.read_csv(filename)
   return None

def analyze_data(data):
   return data.describe()

def visualize_data(data):
   return data.plot(kind='bar')

def perform_advanced_analysis(data):
   results = {}
   results['correlation'] = data.corr()
   results['skew'] = data.skew()
   return results" > analysis.py

git add analysis.py
git commit -m "Update analysis.py with a hidden bug"

# Now use git bisect to find when the bug was introduced
git bisect start
git bisect bad  # Mark current commit as containing the bug
git bisect good main  # Mark the main branch as working correctly

# Git will check out commits for you to test
# Once found, you can examine the exact change that introduced the bug
git diff HEAD^!

Git bisect adalah alat debugging yang kuat yang melakukan pencarian biner melalui riwayat commit Anda untuk menemukan commit mana yang memperkenalkan bug. Jika digabung dengan git diff, ini menciptakan alur kerja yang efisien:

1. Mulai proses bisect dengan git bisect start

2. Tandai commit saat ini sebagai buruk (mengandung bug) dengan git bisect bad

3. Tandai commit yang diketahui baik (yang tidak memiliki bug) dengan git bisect good <commit-hash>

4. Git secara otomatis checkout sebuah commit di tengah riwayat Anda untuk diuji.

5. Setelah menguji commit saat ini, beri tahu git hasilnya:

  • Jika bug ada pada commit ini: git bisect bad
  • Jika bug tidak ada pada commit ini: git bisect good

6. Git akan terus melakukan checkout commit berbeda berdasarkan umpan balik Anda (setelah setiap perintah git bisect bad/good), mempersempit pencarian setiap kali. Ulangi proses pengujian dan penandaan hingga git mengidentifikasi commit buruk pertama.

7. Setelah git menemukan commit bermasalah, git akan menampilkan pesan yang menunjukkan commit mana yang memperkenalkan bug.

8. Periksa dengan tepat apa yang berubah pada commit yang diidentifikasi dengan: git diff HEAD^!

9. Perintah ini menunjukkan secara persis kode apa yang dimodifikasi pada commit yang memperkenalkan bug, sehingga Anda dapat memusatkan upaya debugging pada perubahan spesifik tersebut.

10. Keluar dari bisect kapan saja dengan: git bisect reset Ini akan mengembalikan Anda ke branch sebelum memulai proses bisect.

11. Anda juga dapat mengotomatisasi proses bisect dengan: git bisect run <test-script> yaitu perintah yang mengembalikan 0 untuk commit baik dan non-zero untuk commit buruk.

Alur kerja ini secara drastis mengurangi waktu debugging, terutama pada codebase besar dengan banyak commit antara kondisi berfungsi dan rusak.

Teknik analisis riwayat ini sangat berharga untuk:

  • Menemukan kapan dan mengapa sebuah bug diperkenalkan
  • Memahami evolusi sebuah fitur atau komponen
  • Mengaudit perubahan untuk tinjauan keamanan
  • Mendokumentasikan proses pengambilan keputusan di balik perubahan kode

Dengan menguasai penerapan git diff tingkat lanjut ini, Anda akan dapat menavigasi riwayat proyek dengan presisi, men-debug masalah lebih efisien, dan memperoleh wawasan lebih dalam tentang evolusi codebase Anda.

Referensi Perintah Git Diff

Git diff menawarkan beragam opsi untuk menyesuaikan output dan perilakunya sesuai situasi spesifik. Berikut referensi komprehensif parameter yang paling umum digunakan untuk meningkatkan analisis perbedaan Anda:

Opsi perbandingan dasar

  • git diff - Bandingkan working directory dengan staging area
  • git diff --staged (atau --cached) - Bandingkan staging area dengan commit terakhir
  • git diff HEAD - Bandingkan working directory dengan commit terakhir
  • git diff <commit> - Bandingkan working directory dengan commit tertentu
  • git diff <commit1> <commit2> - Bandingkan dua commit tertentu
  • git diff <branch1> <branch2> - Bandingkan dua branch

Pembatasan path

  • git diff -- <path> - Batasi perbandingan ke file atau direktori tertentu
  • git diff --stat - Tampilkan ringkasan perubahan (file yang berubah, penambahan, penghapusan), opsi yang sangat berguna untuk diff besar
  • git diff --name-only - Hanya tampilkan nama file yang berubah
  • git diff --name-status - Tampilkan nama dan status (ditambahkan, diubah, dihapus) dari file yang berubah

Kontrol tampilan

  • git diff -w (atau --ignore-all-space) - Abaikan perubahan whitespace
  • git diff --ignore-space-change - Abaikan perubahan pada jumlah whitespace
  • git diff --color-words - Tampilkan perbedaan tingkat kata dengan warna
  • git diff --word-diff - Tampilkan perbedaan tingkat kata dalam format berbeda
  • git diff -U<n> - Tampilkan n baris konteks (default adalah 3)
  • git diff --no-prefix - Jangan tampilkan prefiks a/ dan b/ pada output diff

Penyaringan konten

  • git diff --binary - Tampilkan perubahan pada file biner
  • git diff -S<string> - Cari perubahan yang menambahkan atau menghapus string yang ditentukan
  • git diff -G<regex> - Cari perubahan yang cocok dengan pola regex yang ditentukan
  • git diff --pickaxe-all - Saat menggunakan -S atau -G, tampilkan semua perubahan dalam file, bukan hanya yang cocok

Opsi format

  • git diff --patch-with-stat - Tampilkan patch dan ringkasan statistik
  • git diff --compact-summary - Tampilkan ringkasan statistik dalam format ringkas
  • git diff --numstat - Tampilkan statistik dalam format ramah mesin
  • git diff --summary - Tampilkan ringkasan pembuatan/penghapusan

Opsi-opsi ini dapat digabung untuk membuat perbandingan yang kuat dan terarah. Misalnya, untuk melihat perubahan tingkat kata pada file tertentu sambil mengabaikan whitespace:

git diff --color-words -w -- analysis.py

Atau untuk menemukan semua tempat di mana fungsi tertentu mungkin telah ditambahkan atau dihapus:

git diff -S"def perform_advanced_analysis" main feature/advanced-analytics

Memahami opsi-opsi ini membantu Anda mengurangi gangguan dan fokus tepat pada perubahan yang penting, sehingga alur kerja peninjauan kode dan analisis menjadi lebih efisien. Baik Anda sedang memburu bug, mempersiapkan pull request, atau sekadar mencoba memahami apa yang berubah, opsi git diff yang tepat dapat membuat tugas Anda jauh lebih mudah.

Kesimpulan

Sepanjang artikel ini, kita telah mengeksplorasi git diff sebagai perintah serbaguna untuk melihat perubahan kode. Kita telah membahas membandingkan file kerja dengan perubahan yang distage, memeriksa perbedaan antar branch dan commit, serta menggunakan perintah khusus untuk wawasan lebih dalam. Menggabungkan git diff ke dalam alur kerja Anda membantu membangun commit yang lebih bersih, menangkap masalah lebih awal, dan memfasilitasi review kode yang lebih baik. 

Baik bekerja sendiri maupun dalam tim, menguasai git diff meningkatkan Anda dari sekadar menulis kode menjadi memahami bagaimana codebase Anda berevolusi seiring waktu.

Untuk terus membangun keahlian Git Anda, lihat sumber daya berharga berikut: 

Sumber daya ini akan membantu Anda membangun apa yang telah dipelajari tentang git diff dan meningkatkan penguasaan version control ke tingkat berikutnya.

FAQ Git Diff

Apa perbedaan antara git diff dan git diff --staged?

git diff menampilkan perubahan antara working directory dan staging area (perubahan yang belum distage), sedangkan git diff --staged menampilkan perubahan antara staging area dan commit terakhir (apa yang akan dicommit berikutnya).

Bagaimana saya dapat membandingkan perubahan antara dua branch?

Gunakan git diff branch1 branch2 untuk melihat semua perbedaan antar branch. Untuk membandingkan file tertentu, tambahkan -- path/to/file setelah nama branch.

Bagaimana cara mengabaikan perubahan whitespace di git diff?

Gunakan git diff -w atau git diff --ignore-all-space untuk mengabaikan semua perubahan whitespace, sehingga lebih mudah fokus pada perbedaan kode yang substansial daripada pemformatan.

Bisakah saya menggunakan git diff untuk menemukan kapan perubahan tertentu diperkenalkan?

Ya! Gunakan git diff -S"search string" untuk mencari kapan teks ditambahkan/dihapus, atau gabungkan dengan git log -p untuk melihat evolusi kode spesifik. Untuk pinpoint bug, git bisect bersama diff sangat kuat.

Bagaimana saya dapat melihat git diff dengan cara yang lebih visual?

Konfigurasikan alat diff eksternal dengan git config diff.tool <toolname> untuk menggunakan aplikasi diff visual seperti VSCode, Beyond Compare, atau Meld, yang menyediakan perbandingan berdampingan dengan visualisasi yang lebih baik.


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

Saya adalah kreator konten data science dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendalam tentang AI dan ML dengan sedikit gaya sarkastik—karena harus ada sesuatu untuk membuatnya tidak terlalu membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus di DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn. 

Topik
Git
Rekayasa Data

Course DataCamp Teratas

Kursus

Git Tingkat Menengah

2 jam
44.4K
Temukan cabang dan repositori jarak jauh untuk pengendalian versi dalam proyek perangkat lunak dan data kolaboratif menggunakan Git!
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya