Fondasi: Komputermu, Web, dan Alat Kerjamu · 3/7
Git untuk kerja nyata: branch, merge, pull request
Kamu sudah tahu add, commit, push. Ini 80% sisanya yang benar-benar dibutuhkan saat kerja tim.
Baca 35 menit
Setelah pelajaran ini kamu bisa
- Menjelaskan apa sebenarnya sebuah commit
- Membuat branch, bekerja di dalamnya, dan menggabungkannya kembali
- Membuka pull request yang benar-benar bisa dibaca reviewer
- Menyelesaikan merge conflict tanpa panik
- Membatalkan kesalahanmu sendiri dengan aman
Kamu sudah tahu add, commit, push. Itu cukup untuk kerja sendiri. Tapi tidak cukup untuk kerja tim, karena di tim bagian sulitnya bukan menyimpan pekerjaanmu — tapi menggabungkan pekerjaanmu dengan pekerjaan orang lain tanpa kehilangan salah satunya.
Apa sebenarnya sebuah commit
Commit itu bukan diff, dan bukan "perubahan saya". Commit adalah snapshot lengkap dari semua file yang dilacak, plus penunjuk ke commit sebelumnya. Git menampilkan diff karena diff enak dibaca, tapi yang disimpannya snapshot.
Tiga tempat perubahanmu berada
| Tempat | Isinya | Cara masuknya |
|---|---|---|
| Working directory | File yang sedang kamu edit sekarang | Kamu mengetik |
| Staging area (index) | Perubahan yang kamu pilih untuk commit berikutnya | git add |
| Repository | Snapshot yang sudah di-commit, permanen | git commit |
Staging area ada supaya satu sesi kerja yang berantakan bisa jadi beberapa commit yang bersih. Pakai git add -p untuk men-stage *sebagian* isi file — ini cara developer berpengalaman menjaga commit tetap fokus.
Alur kerja branch yang kamu pakai tiap hari
git switch main # start from the shared branch
git pull # get everyone else's latest work
git switch -c feat/login-form # create a branch and move onto it
# ... edit files ...
git status # always look before you add
git add src/login-form.tsx
git commit -m "feat(auth): add login form"
git push -u origin feat/login-form # -u links local and remote, oncegit switch adalah pengganti git checkout yang lebih modern dan jelas saat berpindah branch.Pull request itu sebuah percakapan
Pull request (PR) meminta tim mereview branch-mu lalu menggabungkannya. Waktu reviewer adalah sumber daya yang langka, jadi PR yang baik melakukan tiga hal: ukurannya kecil, deskripsinya menjelaskan *kenapa* perubahan itu ada, dan ia menerangkan hal-hal mengejutkan sebelum reviewer harus bertanya.
- Satu PR, satu tujuan. PR yang memperbaiki bug *sekaligus* mengganti nama dua puluh file tidak bisa direview.
- Sebutkan apa yang sudah kamu uji. "Sudah jalankan test suite, plus cek manual jalur timeout."
- Jawab setiap komentar, walau cuma untuk bilang kamu tidak setuju dan alasannya.
- Review itu soal kodenya, bukan soal kamu. Tidak ada yang menyerangmu saat mengomentari PR-mu.
Merge conflict
Conflict berarti dua branch mengubah baris yang sama dan git tidak mau menebak mana yang kamu maksud. Itu bukan kerusakan, dan tidak ada yang hilang. Git menandai lokasinya lalu menunggumu.
<<<<<<< HEAD
const timeout = 5000; // what is already on your branch
=======
const timeout = 30000; // what is coming in from the other branch
>>>>>>> main- Buka file-nya. Putuskan kode itu *seharusnya* apa — sering kali bukan salah satu sisi apa adanya.
- Hapus ketiga baris penanda (
<<<<<<<,=======,>>>>>>>). - Simpan, lalu
git addfile-nya untuk menandai sudah selesai. - Jalankan test. Merge yang sintaksnya benar masih bisa salah secara logika.
git commituntuk menyelesaikan merge.
Membatalkan sesuatu
git restore src/a.ts # throw away uncommitted edits to a file
git restore --staged src/a.ts # unstage, but keep the edits
git commit --amend # fix the message or add to the last commit
git revert <commit> # make a NEW commit that undoes an old one
git reset --hard <commit> # DANGEROUS: erase commits and editsTugas praktik
Buat conflict dengan sengaja, di repository latihan. Buat file berisi satu baris di main lalu commit. Buat branch feat/x, ubah baris itu, commit. Kembali ke main, ubah baris yang sama dengan cara berbeda, commit. Sekarang git merge feat/x dan selesaikan. Melakukan ini sekali saat tidak ada risiko lebih berharga daripada membacanya lima kali.
Hasil yang diharapkan
`git log --oneline --graph` menampilkan dua branch yang menyatu di sebuah merge commit.