Git

Belum masuk. Progresmu tidak tersimpan.

Masuk
  • Bab 4 dari 8
  • 25 menit
  • 4 soal kuis

Siklus Kerja Harian: init, status, add, commit, log

Di bab ini (11 bagian)
  1. Tujuan
  2. Siklus yang terus berulang
  3. git init: mulai dari nol
  4. git status: kompas kamu
  5. git add: memilih apa yang disimpan
  6. git commit -m: simpan snapshot
  7. git log --oneline: lihat riwayat
  8. Peta perintah dasar
  9. Kesalahan umum
  10. Coba sendiri
  11. Rangkuman

Tujuan bab ini

  • Membuat repositori baru dengan git init dan membaca keadaannya lewat git status.
  • Memindahkan perubahan ke staging area dengan git add (per file, ., dan sekilas -p).
  • Menyimpan snapshot dengan git commit -m lalu melihat riwayatnya dengan git log --oneline.
  • Hafal peta enam perintah dasar: clone, status, add, commit, push, pull.

Siklus yang terus berulang

Kerja harian dengan Git itu sebenarnya cuma satu lingkaran yang kamu putari berkali-kali dalam sehari:

  1. Siapkan repositori: git init untuk proyek baru, atau git clone <url> untuk proyek yang sudah ada di GitHub.
  2. Ubah berkas seperti biasa di editor.
  3. Periksa dan pilih: git status, lalu git add untuk berkas yang mau disimpan.
  4. Simpan snapshot: git commit -m "pesan".
  5. Bagikan ke tim: git push.

Lima langkah siklus kerja harian Git dari init sampai push

Ingat tiga "tempat" yang sudah kamu kenal: working directory (berkas yang kamu edit), staging area (daftar perubahan yang siap disimpan), dan repositori (riwayat commit di folder .git). Hampir semua perintah di bab ini hanya memindahkan perubahan dari satu tempat ke tempat berikutnya.

git init: mulai dari nol

Masuk ke folder proyek, lalu jalankan:

git init
Initialized empty Git repository in /home/rina/profil-rina/.git/

Git membuat folder tersembunyi .git yang menyimpan seluruh riwayat. Jangan dihapus, karena itu sama saja dengan menghapus semua commit. Kalau di laptopmu sudah diatur git config --global init.defaultBranch main, cabang pertama otomatis bernama main. Tanpa pengaturan itu, Git 2.43 masih memakai nama master dan menampilkan petunjuk tentang cara menggantinya.

git status: kompas kamu

git status tidak mengubah apa pun, jadi aman dijalankan kapan saja. Biasakan menjalankannya sebelum dan sesudah setiap perintah lain. Setelah membuat README.md dan index.html di repositori baru:

On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	README.md
	index.html

nothing added to commit but untracked files present (use "git add" to track)

Untracked artinya Git melihat berkas itu, tapi belum pernah menyimpannya. Perhatikan juga bahwa Git selalu memberi petunjuk perintah berikutnya di dalam tanda kurung. Baca petunjuk itu, karena sering kali jawabannya ada di sana.

Mau versi singkat? Pakai git status -s. Kolom kiri menunjukkan isi staging area, kolom kanan menunjukkan working directory:

KodeArti
??untracked, belum pernah di-add
A berkas baru, sudah di staging
Mdiubah, belum di staging
M diubah, sudah di staging
MMsudah di staging, lalu diubah lagi

git add: memilih apa yang disimpan

git add README.md   # satu berkas
git add .           # semua perubahan di folder ini dan subfoldernya

Setelah git add README.md, status berubah menjadi:

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   README.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	index.html

Staging area membuat kamu bisa memilih. Misalnya kamu mengubah tiga berkas, tapi baru satu yang benar-benar selesai. Cukup add berkas yang selesai itu, commit, lalu lanjutkan sisanya.

git add -p (patch) bahkan bisa memilih sebagian isi sebuah berkas. Git menampilkan potongan perubahan satu per satu lalu bertanya:

(1/1) Stage this hunk [y,n,q,a,d,s,e,?]?

Jawab y untuk memasukkan potongan itu, n untuk melewatinya, s untuk memecahnya jadi lebih kecil, dan q untuk berhenti. Untuk sekarang cukup tahu bahwa fitur ini ada. Nanti saat commit-mu mulai rapi, fitur ini akan sering kepakai.

git commit -m: simpan snapshot

git commit -m "Tambah README dan halaman awal"
[main (root-commit) 16416d0] Tambah README dan halaman awal
 2 files changed, 2 insertions(+)
 create mode 100644 README.md
 create mode 100644 index.html

16416d0 adalah 7 karakter awal hash commit. Hash di laptopmu pasti berbeda, karena hash dihitung dari isi, nama penulis, dan waktu. root-commit menandai commit pertama di repositori. Yang ikut tersimpan hanya isi staging area, bukan semua berkas yang sedang kamu edit.

Pesan commit yang baik itu pendek, jelas, dan menjelaskan apa yang berubah: "Tambah form login", "Perbaiki validasi email". Hindari pesan seperti "update" atau "asdf", karena kamu sendiri yang akan bingung membacanya bulan depan.

git log --oneline: lihat riwayat

git log --oneline
8094310 (HEAD -> main) Tambah paragraf perkenalan
16416d0 Tambah README dan halaman awal

Satu commit satu baris, yang terbaru di atas. (HEAD -> main) artinya kamu sedang berada di cabang main, tepat di commit tersebut. Tanpa --oneline, Git menampilkan hash lengkap, penulis, dan tanggal. Kalau daftarnya panjang, Git membuka pager: gulir dengan panah, keluar dengan q.

Peta perintah dasar

Enam perintah ini sudah cukup untuk 90% kerja harian:

PerintahFungsi
git clone <url>menyalin repositori remote beserta seluruh riwayatnya
git statusmelihat berkas yang berubah, ter-stage, atau untracked
git add <file> / .memindahkan perubahan ke staging area
git commit -m "pesan"menyimpan snapshot dari staging area
git pushmengirim commit lokal ke remote
git pullmengambil perubahan dari remote lalu menggabungkannya

clone, push, dan pull butuh repositori remote seperti GitHub, dan akan kita bahas di bab remote. Empat perintah sisanya bisa kamu latih sekarang juga, sepenuhnya offline.

Kesalahan umum

  • Lupa git add sebelum commit. Git akan menjawab no changes added to commit. Cek git status dan add berkasnya dulu.
  • Mengedit lagi setelah add. Status MM berarti versi yang ada di staging adalah versi lama. Jalankan git add sekali lagi supaya perubahan terbaru ikut tersimpan.
  • git init di folder yang salah, misalnya di home folder. Seluruh isi home jadi untracked. Hapus folder .git yang salah itu, lalu jalankan init di folder proyek.
  • Commit raksasa. Satu commit berisi sepuluh perubahan yang tidak saling berhubungan susah dibaca dan susah dibatalkan. Commit kecil dan fokus jauh lebih enak.
  • Ikut meng-commit berkas rahasia seperti .env gara-gara git add .. Selalu lihat git status sebelum commit.

Coba sendiri

Ikuti di terminal. Hash yang muncul di laptopmu akan berbeda, dan itu normal.

mkdir profil-rina && cd profil-rina
git init
echo "# Profil Rina" > README.md
git status -s
?? README.md
git add README.md
git status -s
git commit -m "Tambah README"
A  README.md
[main (root-commit) da9730f] Tambah README
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

Sekarang ubah berkasnya, lalu ulangi siklusnya:

echo "Halo, aku Rina." >> README.md
git status -s
git add .
git commit -m "Tambah perkenalan"
git log --oneline
 M README.md
[main 95a54f9] Tambah perkenalan
 1 file changed, 1 insertion(+)
95a54f9 (HEAD -> main) Tambah perkenalan
da9730f Tambah README

Coba juga: edit README, jalankan git add, edit lagi, lalu lihat git status -s dan cari kode MM.

Rangkuman

  • Siklus harian: edit, git status, git add, git commit, ulangi, lalu git push untuk berbagi.
  • git status adalah kompas: aman dijalankan kapan saja dan selalu memberi petunjuk perintah berikutnya.
  • git add memilih apa yang masuk commit, bisa per berkas, . untuk semua, atau -p untuk sebagian isi berkas.
  • git commit -m hanya menyimpan isi staging area, dan git log --oneline menampilkan riwayatnya per baris.

Selesaikan bab ini

  1. 1. Baca materi
  2. 2. Kuis (4 soal)

Cek pemahaman

  1. 1Apa output baris terakhir rangkaian perintah berikut?

    git init
    echo halo > a.txt
    git add a.txt
    echo lagi >> a.txt
    git status -s
  2. 2Perintah mana yang menyimpan isi staging area sebagai snapshot baru?

  3. 3git add -p bisa memasukkan sebagian perubahan dalam satu berkas ke staging area.

  4. 4Berapa baris yang dicetak oleh git log --oneline di akhir?

    git init
    echo a > a.txt
    git add a.txt
    git commit -m "Satu"
    echo b > b.txt
    git commit -m "Dua"
    git log --oneline