Bermain dengan Git Diff
Umumnya, perintah git diff
digunakan untuk menginspeksi perubahan yang kita lakukan ketika bekerja pada suatu repositori Git. Dengan perintah dasar git diff
, Git akan mencetak semua insertion dan deletion yang kita lakukan pada repositori tersebut per berkas yang terdampak pekerjaan kita, seperti misalnya:
$ git diff
diff --git a/puisi.md b/puisi.md
index 544438e..3274c94 100644
--- a/puisi.md
+++ b/puisi.md
@@ -4,4 +4,4 @@
Lorem ipsum dolor sit amet
Consectetur adipiscing elit
Sed vitae faucibus ante
-Curabitur tempor eros a risus eleifend faucibus
+Integer sed urna ac ex porta congue
Namun tahukah Anda bahwa git diff
memiliki banyak kegunaan lain yang dapat membantu Anda menganalisis repositori Anda lebih dalam? Berikut adalah beberapa kegunaan lain git diff
yang mungkin dapat membantu Anda dalam pekerjaan sehari-hari Anda.
Membandingkan Referensi
Kita dapat memberikan referensi sebagai masukan pada git diff
untuk mengetahui perbedaan antar dua referensi. Jika kita memberikan satu referensi saja sebagai parameter kepada git diff
, maka Git akan membandingkan working directory saat ini dengan referensi yang kita berikan tersebut.
$ git diff HEAD~
diff --git a/puisi.md b/puisi.md
index 0a96d0e..5ee54f9 100644
--- a/puisi.md
+++ b/puisi.md
@@ -1,6 +1,8 @@
# Puisi
+## oleh Lipsum
Lorem ipsum dolor sit amet
Consectetur adipiscing elit
Sed vitae faucibus ante
-Curabitur tempor eros a risus eleifend faucibus
+Integer sed urna ac ex porta congue
+Etiam sagittis vehicula porta
Jika kita memberikan dua referensi, maka Git akan membandingkan referensi pada posisi kedua terhadap referensi pada posisi pertama yang kita berikan (urutannya berpengaruh!).
catatan: pada posisi HEAD, saya menambahkan baris ## oleh Lipsum
.
$ git diff HEAD~ HEAD
diff --git a/puisi.md b/puisi.md
index 0a96d0e..544438e 100644
--- a/puisi.md
+++ b/puisi.md
@@ -1,4 +1,5 @@
# Puisi
+## oleh Lipsum
Lorem ipsum dolor sit amet
Consectetur adipiscing elit
Jika urutan referensinya kita balikkan:
$ git diff HEAD HEAD~
diff --git a/puisi.md b/puisi.md
index 544438e..0a96d0e 100644
--- a/puisi.md
+++ b/puisi.md
@@ -1,5 +1,4 @@
# Puisi
-## oleh Lipsum
Lorem ipsum dolor sit amet
Consectetur adipiscing elit
Referensi ini selain bisa diberikan sebagai Git refs seperti HEAD
atau tags, bisa juga langsung diberikan sebagai commit hash.
Mencetak Hanya Nama Berkas yang Berubah
Kadang kita hanya perlu mengetahui berkas-berkas apa saja yang berubah. Kita dapat mencapainya dengan memberikan flag --name-only
kepada git diff
.
$ git diff --name-only
puisi.md
Menyaring Perubahan Berkas Berdasarkan Statusnya
Git dapat membedakan perubahan berkas pada working directory-nya berdasarkan tipe perubahan yang terjadi pada berkas tersebut. Pada git diff
, kita dapat menyaring berkas yang berubah berdasarkan tipenya dengan flag --diff-filter
. Berikut cara penggunaan dan input yang bisa kita berikan terhadap flag tersebut.
--diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
A: Added | ditambahkan ke index
C: Copied | disalin
D: Deleted | dihapus
M: Modified | dimodifikasi
R: Renamed | diubah namanya
T: Have their type changed | diubah tipenya
U: Unmerged | belum tergabungkan
X: Unknown | tidak diketahui
B: Have had their pairing broken | diubah sampai proporsi tertentu
Misalkan kita memiliki keadaan working directory seperti ini
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: aku-chairil-anwar.md
modified: puisi.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
hujan-bulan-juni-sapardi-djoko-darmono.md
no changes added to commit (use "git add" and/or "git commit -a")
Kita bisa melakukan git diff
hanya untuk berkas yang dihapus dan berkas yang diubah dengan opsi --diff-filter=DM
.
$ git diff --diff-filter=DM
diff --git a/aku-chairil-anwar.md b/aku-chairil-anwar.md
deleted file mode 100644
index fdcc0f3..0000000
--- a/aku-chairil-anwar.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Aku
-## oleh Chairil Anwar
-
-Kalau sampai waktuku
-Ku mau tak seorang kan merayu
-Tidak juga kau
-
-Tak perlu sedu sedan itu
-
-Aku ini binatan jalang
-Dari kumpulannnya terbuang
-
-Biar peluru menembus tubuhku
-Aku tetap meradang menerjang
-
-Luka dan bisa kubawa berlari
-Berlari
-
-Hingga hilang pedih peri
-
-Dan aku akan lebih tidak peduli
-Ku mau hidup seribu tahun lagi
diff --git a/puisi.md b/puisi.md
index 544438e..5ee54f9 100644
--- a/puisi.md
+++ b/puisi.md
@@ -4,4 +4,5 @@
Lorem ipsum dolor sit amet
Consectetur adipiscing elit
Sed vitae faucibus ante
-Curabitur tempor eros a risus eleifend faucibus
+Integer sed urna ac ex porta congue
+Etiam sagittis vehicula porta
Menyaring Perubahan Berkas pada Path Tertentu
Mungkin ada kasus di mana kita hanya perlu berkonsentrasi untuk memeriksa perubahan berkas-berkas pada direktori tertentu. Kita dapat memerintahkan git diff
untuk mempersempit cakupannya menjadi dalam path tertentu dengan memberikan path-nya sebagai parameter.
Misalkan kita mempunyai keadaan working directory seperti ini.
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: puisi.md
modified: puisi/aku-chairil-anwar.md
modified: puisi/hujan-bulan-juni-sapardi-djoko-darmono.md
no changes added to commit (use "git add" and/or "git commit -a")
Kita dapat mempersempit cakupan eksekusi git diff
menjadi hanya pada direktori puisi/
.
$ git diff puisi/
diff --git a/puisi/aku-chairil-anwar.md b/puisi/aku-chairil-anwar.md
index fdcc0f3..c8ba01b 100644
--- a/puisi/aku-chairil-anwar.md
+++ b/puisi/aku-chairil-anwar.md
@@ -1,5 +1,6 @@
# Aku
## oleh Chairil Anwar
+---
Kalau sampai waktuku
Ku mau tak seorang kan merayu
diff --git a/puisi/hujan-bulan-juni-sapardi-djoko-darmono.md b/puisi/hujan-bulan-juni-sapardi-djoko-darmono.md
index 38df39a..74c22c0 100644
--- a/puisi/hujan-bulan-juni-sapardi-djoko-darmono.md
+++ b/puisi/hujan-bulan-juni-sapardi-djoko-darmono.md
@@ -1,5 +1,6 @@
# Hujan Bulan Juni
## oleh Sapardi Djoko Darmono
+---
Tak ada yang lebih tabah
Dari hujan bulan Juni
Namun, disarankan untuk menggunakan ekspresi shell --
untuk memisahkan antara opsi yang kita berikan kepada perintah git dengan parameter path yang kita berikan, seperti di bawah ini.
$ git diff -- puisi/
Selain kasus-kasus di atas, tentunya masih banyak lagi kegunaan git diff
yang bisa dieksplorasi. Semuanya terdokumentasi di website Git SCM. Mari budayakan membaca dokumentasi untuk meningkatkan produktivitas kita!