Kursus
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:
- Git Cheat Sheet — Referensi cepat untuk perintah Git umum
- Kursus Introduction to Git — Untuk pemula yang mempelajari dasar Git
- Tutorial GitHub dan Git untuk Pemula — Pengenalan praktis Git dan GitHub
- Kursus Intermediate Git — Untuk yang siap meningkatkan keterampilan Git
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).

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:

Catatan: Untuk keluar dari tampilan keluaran git diff, tekan “q” di terminal Anda.
Mari uraikan keluarannya:
- Header (
diff --git a/analysis.py b/analysis.py) menunjukkan berkas yang dibandingkan, yaitu analysis.py - Metadata berkas (
index db0e049..a7a7ab0 100644) menampilkan pengenal internal Git untuk versi sebelum dan sesudah - Penanda berkas (
--- a/analysis.py and +++ b/analysis.py) menunjukkan berkas “sebelum” dan “sesudah” - Hunk header (
@@ -5,3 +5,6 @@) menunjukkan baris mana yang terdampak. Notasi ini dapat diartikan sebagai:
-5,3berarti mulai dari baris 5 di berkas asli, 3 baris ditampilkan dalam diff+5,6berarti 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:

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)

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:
- Membuat perubahan pada beberapa berkas
- Menjalankan
git diffuntuk meninjau semua perubahan - Menggunakan
git add <file>secara selektif untuk men-stage kelompok perubahan yang logis - Menjalankan
git diff --stageduntuk memverifikasi apa yang akan di-commit - Commit perubahan yang sudah di-stage dengan
git commit -m "Your message" - 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

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:

Alat diff visual memberikan beberapa keunggulan:
- Perbandingan berdampingan yang memudahkan melihat konteks
- Highlight sintaks yang selaras dengan preferensi editor Anda
- Navigasi lanjutan antar perubahan
- 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 areagit diff --staged(atau--cached) - Bandingkan staging area dengan commit terakhirgit diff HEAD- Bandingkan working directory dengan commit terakhirgit diff <commit>- Bandingkan working directory dengan commit tertentugit diff <commit1> <commit2>- Bandingkan dua commit tertentugit diff <branch1> <branch2>- Bandingkan dua branch
Pembatasan path
git diff -- <path>- Batasi perbandingan ke file atau direktori tertentugit diff --stat- Tampilkan ringkasan perubahan (file yang berubah, penambahan, penghapusan), opsi yang sangat berguna untuk diff besargit diff --name-only- Hanya tampilkan nama file yang berubahgit 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 whitespacegit diff --ignore-space-change- Abaikan perubahan pada jumlah whitespacegit diff --color-words- Tampilkan perbedaan tingkat kata dengan warnagit diff --word-diff- Tampilkan perbedaan tingkat kata dalam format berbedagit 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 binergit diff -S<string>- Cari perubahan yang menambahkan atau menghapus string yang ditentukangit diff -G<regex>- Cari perubahan yang cocok dengan pola regex yang ditentukangit 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 statistikgit diff --compact-summary- Tampilkan ringkasan statistik dalam format ringkasgit diff --numstat- Tampilkan statistik dalam format ramah mesingit 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:
- Git Cheat Sheet komprehensif untuk referensi cepat
- Introduction to Git untuk pemula yang ingin memantapkan dasar-dasarnya
- GitHub and Git Tutorial for Beginners yang praktis untuk pembelajaran langsung
- Intermediate Git untuk meningkatkan keterampilan Anda dengan strategi branching dan teknik kolaborasi
- Foundations of Git untuk wawasan lebih dalam tentang model internal Git dan alur kerja lanjutan.
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.
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.

