10 min read

Learn About Command Git

Tugas kuliah untuk belajar tentang command git

1. Persiapan Awal

Anda baru saja menginstal Git di komputer baru. Sebelum mulai mengerjakan proyek apa pun, Anda harus memberi tahu Git siapa nama dan alamat email Anda agar setiap kontribusi kode tercatat atas nama Anda.

terminal
~git config --global user.name 'Nama Anda'
~git config --global user.email 'email@example.com'
Penjelasan: config --global mengatur identitas Anda untuk semua proyek Git di komputer tersebut. Identitas ini akan menempel secara permanen pada setiap commit yang Anda buat.

2. Memulai Proyek Baru dari Nol

Anda baru saja membuat folder proyek lokal baru dan ingin mulai melacak perubahan menggunakan Git, lalu menyimpan versi pertamanya.

terminal
~git init
~git add .
~git commit -m 'pesan anda'
Penjelasan: init mengubah folder biasa menjadi repositori Git. add . memasukkan semua file ke staging area, dan commit menyimpan perubahan tersebut secara permanen di riwayat lokal.

3. Menghubungkan Lokal ke Server (Remote)

Proyek lokal Anda sudah siap, dan sekarang Anda ingin mengunggahnya ke GitHub/GitLab agar aman dan bisa diakses tim.

terminal
~git remote add origin <url-repositori>
~git branch -M main
~git push -u origin main
Penjelasan: Menambahkan alamat remote bernama 'origin', memastikan nama branch utama adalah 'main', dan mengunggah kode sambil mengatur agar push selanjutnya cukup dengan perintah git push.

4. Bergabung dengan Proyek yang Sudah Ada

Anda baru saja masuk ke tim baru dan perlu mengambil source code proyek yang sudah berjalan ke laptop Anda.

terminal
~git clone <url-repositori>
~cd <nama-folder>
~git status
Penjelasan: clone mengunduh seluruh repositori beserta riwayat commitnya. status digunakan untuk mengecek di branch mana Anda berada dan apakah ada perubahan.

5. Mengerjakan Fitur Baru secara Terisolasi

Manajer proyek meminta Anda membuat fitur "Login". Anda tidak ingin merusak kode utama selama proses pembuatan fitur ini.

terminal
~git switch -c feature/login

lalu di dalam branch feature/login, Anda membuat halaman login

terminal
~git add login.html
~git commit -m 'feat: membuat halaman login'
Penjelasan: switch -c (atau checkout -b) membuat branch baru sekaligus memindahkan Anda ke sana. Pekerjaan Anda kini aman dan terpisah dari branch utama. Anda bisa melihat gambar ini untuk lebih jelasnya.

6. Menyimpan Pekerjaan yang Belum Selesai Sementara

Anda sedang mengerjakan fitur, tiba-tiba ada bug darurat di branch utama yang harus segera diperbaiki. Pekerjaan Anda saat ini belum siap untuk di commit.

terminal
~git stash
~git switch main

lalu Anda memperbaiki bug di branch main

setelah selesai memperbaiki bug, Anda switch kembali ke branch feature/login

terminal
~switch feature/login
~git stash pop
Penjelasan: stash menyimpan perubahan sementara yang belum di commit ke dalam clipboard Git, sehingga working directory menjadi bersih. stash pop mengembalikan pekerjaan tersebut.

7. Mengambil Pembaruan Terbaru dari Tim

Teman satu tim Anda baru saja menyelesaikan fitur keranjang belanja dan mengunggahnya. Anda perlu menyinkronkan kode lokal Anda dengan kode terbaru.

terminal
~git fetch origin
~git pull origin main
Penjelasan: fetch mengambil metadata perubahan dari server tanpa mengubah kode lokal. pull mengunduh perubahan tersebut dan langsung menggabungkannya ke branch Anda saat ini.

8. Menggabungkan Fitur ke Branch Utama

Fitur "Login" Anda sudah selesai dan diuji. Sekarang waktunya menggabungkan fitur tersebut ke branch utama.

terminal
~git switch main
~git pull origin main
~git merge feature/login
Penjelasan: Anda berpindah ke main, memastikan main adalah versi paling baru, lalu menjalankan merge untuk menyatukan pekerjaan di branch fitur Anda ke dalam branch utama.

9. Memilih Sebagian Perubahan (Patching)

Anda mengubah 5 file, tapi hanya ingin meng commit 2 file pertama untuk commit ini karena berkaitan dengan fitur A, sedangkan 3 lainnya untuk fitur B.

terminal
~git add file1.js file2.js
~git commit -m 'feat: update fitur
Penjelasan: Daripada add ., kita menyebutkan nama file secara spesifik agar commit lebih terorganisir dan memiliki konteks yang jelas.

10. Memperbaiki Typo di Pesan commit Terakhir

Anda baru saja menekan enter untuk commit, lalu menyadari ada salah ketik yang fatal di pesan commitnya, atau ada satu file yang terlupa dimasukkan.

terminal
~git add file_yang_terlupa.js
~git commit --amend -m 'feat: pesan commit yang sudah diperbaiki'
Penjelasan: --amend akan menimpa commit terakhir Anda dengan perubahan baru dan/atau pesan baru tanpa membuat commit tambahan di riwayat.

11. Membatalkan Perubahan File yang Belum Di commit

Anda bereksperimen dengan suatu file kode, dan eksperimen itu gagal total. Anda ingin mengembalikan file tersebut persis seperti kondisi pada commit terakhir.

terminal
~git restore index.js

atau

terminal
~git checkout -- index.js
Penjelasan: restore akan membuang semua perubahan yang belum masuk staging pada file tersebut dan mengembalikannya ke kondisi bersih semula.

12. Membatalkan commit yang Sudah Terlanjur Dibagikan

Anda sudah melakukan push ke server, tapi ternyata kode tersebut membuat aplikasi crash. Anda harus membatalkannya tanpa merusak riwayat commit teman setim.

terminal
~git log --oneline
~git revert <id commit-yang-bermasalah>
~git push origin main
Penjelasan: Berbeda dengan menghapus commit, revert membuat satu commit baru yang berisi kebalikan dari commit yang bermasalah. Ini adalah cara teraman untuk rollback kode yang sudah di-push.

13. Mereset Kode secara Ekstrem (Hard Reset)

Anda sedang bekerja di branch eksperimental dan semua kodingan hari ini berantakan. Anda ingin membuang semuanya dan kembali ke commit tertentu di masa lalu secara permanen.

terminal
~git reset --hard <id commit-tujuan>
Awas: --hard sangat destruktif. Ini akan menghapus semua file dan commit yang terjadi setelah ID commit yang dituju. Gunakan hanya jika Anda yakin seratus persen.

14. Menyelesaikan Konflik Penggabungan (Merge Conflict)

Saat Anda melakukan git pull, ternyata Anda dan teman setim Anda mengedit baris kode yang persis sama. Git bingung dan meminta Anda menyelesaikannya.

terminal
~git pull
index.html
<html>
<body>
<<<<<<< HEAD (Current Change)
<h1>test konflik</h1>
=======
<h1>learn about command git</h1>
>>>>>>> origin/main (Incoming Change)
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit...</p>
<a href="login.html">Login</a>
</body>
</html>

Hapus semua tanda aneh tersebut (<<<<<<<, =======, >>>>>>>) dan pilih kode mana yang ingin dipertahankan, atau gabungkan keduanya. Misalnya, Anda mengeditnya menjadi:

index.html
<html>
<body>
<h1>test konflik</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit...</p>
<a href="login.html">Login</a>
</body>
</html>

Setelah itu, kita perlu menambahkan file yang sudah diperbaiki ke staging area dan melakukan commit:

terminal
~git add index.html
~git commit -m 'fix: menyelesaikan konflik
Penjelasan: Saat konflik terjadi, Git menghentikan proses merge. Kita harus mengedit file secara manual, menandainya sudah selesai dengan add, lalu melanjutkan dengan commit.

15. Mengambil Satu commit Spesifik (Cherry-Pick)

Teman Anda membuat perbaikan bug di branch lain. Anda butuh perbaikan itu sekarang di branch Anda tanpa harus menggabungkan seluruh fitur miliknya.

terminal
~git log --oneline
~git switch branch_anda
~git cherry-pick <id commit-teman>
Penjelasan: cherry-pick mengambil persis satu commit dari tempat lain dan menempelkannya (menduplikasinya) ke branch Anda saat ini.

16. Merapikan Riwayat commit sebelum Merge (Rebase)

Anda ingin memperbarui branch fitur Anda dengan perubahan terbaru dari main, tetapi Anda ingin riwayat commitnya tetap linier dan rapi tanpa commit merge yang berantakan.

terminal
~git switch feature/keranjang
~git fetch origin
~git rebase origin/main
Penjelasan: rebase mengambil commit commit Anda, menyimpannya sementara, menarik versi terbaru dari main, lalu meletakkan kembali commit Anda satu per satu di ujung paling atas.

17. Menggabungkan Banyak commit Kecil (Squash)

Saat mengerjakan fitur, Misal Anda membuat 3 commit kecil. Anda ingin menggabungkannya menjadi 1 commit solid sebelum diserahkan.

Jalankan perintah rebase mundur sebanyak 3 commit dari titik saat ini HEAD:

terminal
~git rebase -i HEAD~3

Setelah itu, Terminal Anda akan berubah menjadi teks editor, Ubah kata pick menjadi squash pada commit yang ingin dilebur ke commit di atasnya. Biarkan commit paling atas tetap pick

Setelah editor pertama ditutup, Git akan otomatis membuka editor kedua. Di sini Git menggabungkan semua pesan commit lama Anda dan meminta Anda menuliskan satu pesan commit baru untuk hasil gabungan ini.

Hapus atau beri tanda # pada pesan commit yang lama, lalu sisakan atau tulis pesan baru yang rapi, misalnya:

Terakhir, simpan dan tutup editor. Git akan menggabungkan commit tersebut. Sekarang Anda bisa mendorong perubahan ini ke remote:

terminal
~git push -f origin feature/branch
Penjelasan: Interactive rebase (-i) memungkinkan kita memanipulasi riwayat commit (menggabungkan, menghapus, atau mengubah urutan) sebelum dipublikasikan ke branch utama.

18. Mencari Tahu Siapa Penulis Baris Kode (Blame)

Anda menemukan fungsi yang aneh dan menyebabkan bug, Anda butuh bertanya kepada orang yang menulis baris tersebut mengapa kodenya ditulis seperti itu.

terminal
~git blame index.html
Penjelasan: blame akan menampilkan setiap baris dalam file beserta nama pembuat, tanggal, dan ID commit kapan baris tersebut terakhir kali dimodifikasi.

19. Menandai Versi Rilis Baru (Tagging)

Aplikasi Anda sudah siap diluncurkan untuk versi 2.0.0. Anda ingin memberikan penanda permanen di riwayat Git.

terminal
~git tag -a v2.0.0 -m 'Release version 2.0.0'
~git push origin v2.0.0
Penjelasan: tag memberikan nama pada titik commit spesifik. Berguna untuk rilis produksi dan sering digunakan oleh sistem CI/CD untuk memicu proses deployment.

20. Membersihkan Branch yang Sudah Tidak Terpakai

Setelah berbulan-bulan, tumpukan branch fitur yang sudah di-merge memenuhi daftar Anda. Waktunya melakukan bersih-bersih agar repositori kembali rapi.

terminal
~git branch -d feature/login
~git remote prune origin
Penjelasan: -d menghapus branch di komputer lokal Anda (hanya aman jika sudah di-merge). prune membersihkan referensi branch remote yang ternyata sudah dihapus di server (GitHub/GitLab).