# Git
## Apa Itu Git?
Git adalah sebuah program komputer yang digunakan untuk mengelola dan melacak perubahan pada berkas atau proyek. Ini berguna ketika bekerja pada proyek yang berkelanjutan dan membutuhkan beberapa orang untuk bekerja bersama. Git memungkinkan tim untuk bekerja secara bersamaan pada berkas yang sama dan menyimpan versi terbaru dari proyek tersebut, sehingga memudahkan untuk menemukan dan memperbaiki masalah jika terjadi kesalahan.
Dengan Git, setiap perubahan yang dilakukan pada proyek dicatat dan disimpan, sehingga pengguna dapat kembali ke versi sebelumnya jika diperlukan. Ini juga memungkinkan pengguna untuk membandingkan perubahan antar versi dan membuat cabang-cabang (branch) baru untuk mempercantik dan menguji fitur baru, sebelum menggabungkannya dengan versi utama dari proyek. Git adalah salah satu alat pengontrol versi yang paling populer dan banyak digunakan oleh para pengembang perangkat lunak.
## Istilah-Istilah Dalam Git
Berikut adalah beberapa istilah penting dalam Git:
| Istilah | Penjelasan |
| --- | --- |
| Repository | Tempat penyimpanan berkas dan informasi perubahan dalam sebuah proyek |
| Commit | Aksi menyimpan perubahan pada berkas dalam repository. Setiap commit memiliki pesan yang menjelaskan perubahan apa yang dilakukan |
| Branch | Rantai versi dari sebuah proyek yang memungkinkan pengguna untuk bekerja pada fitur baru atau memperbaiki masalah tanpa mempengaruhi versi utama dari proyek |
| Merge | Proses menggabungkan dua atau lebih branch menjadi satu |
| Pull Request | Permintaan untuk menggabungkan branch tertentu ke branch utama. Ini biasanya dilakukan setelah review dan diskusi dengan tim lain |
| HEAD | Referensi terbaru dalam branch saat ini |
| Staging Area | Tempat transisi untuk berkas yang akan di-commit. Berkas harus di-add ke area ini sebelum di-commit |
| Remote | Referensi ke repository yang berada di server lain atau hosting service seperti GitHub |
| Fork | Proses membuat salinan repository ke akun pengguna lain |
| Clone | Proses menyalin repository ke komputer lokal pengguna |
## Perintah-Perintah Dasar Git
Berikut adalah beberapa perintah dasar Git:
| Perintah | Penjelasan |
| --- | --- |
| `git init` |Inisialisasi repository Git baru pada direktori saat ini |
| `git clone <url>` | Menyalin repository dari server remote ke komputer lokal. `<url>` merupakan alamat URL repository yang akan diclone |
| `git add <file>` | Menambahkan berkas ke daftar perubahan yang akan di-commit. `<file>` bisa diganti dengan nama berkas atau wildcard, seperti tanda titik (.) |
| `git commit -m "<message>"` | Menyimpan perubahan yang telah ditambahkan dengan git add ke repository. `<message>` adalah pesan yang menjelaskan perubahan apa yang dilakukan |
| `git status` | Menampilkan status dari berkas yang ada dalam direktori saat ini dan membedakan antara berkas yang sudah di-commit dan berkas yang belum |
| `git log` | Menampilkan riwayat dari semua commit yang pernah dilakukan |
| `git diff` | Menampilkan perbedaan antara versi berkas saat ini dan versi terakhir yang di-commit |
| `git branch <nama>` | Membuat branch baru dengan nama `<nama>` |
| `git checkout <nama>` | Berpindah ke branch `<nama>`. Kita juga bisa langsung membuat nama branch baru dan berpindah ke branch baru tersebut dengan perintah `git checkout -b <nama>` |
| `git merge <nama>` | Menggabungkan branch`<nama>` ke branch yang sedang aktif |
| `git pull` | Mengunduh perubahan terbaru dari repository remote dan menggabungkannya dengan repository lokal |
| `git push` | Mengirim perubahan dari repository lokal ke repository remote |
## Advanced Git
### 1. Git Reset
Git reset adalah perintah Git yang digunakan untuk membatalkan perubahan pada repositori Git. Ini dapat digunakan untuk mengambil beberapa tahap mundur dalam sejarah repositori, membatalkan commit, atau membatalkan perubahan pada working tree dan indeks. Git reset memiliki tiga tipe: soft, mixed, dan hard, yang mempengaruhi cara perubahan dalam repositori dibatalkan.
Untuk menggunakan perintah Git reset, Anda dapat menjalankan perintah berikut dalam terminal atau Command Prompt:
```css=
git reset <mode> <commit>
```
Di mana `<mode>` adalah tipe reset (soft, mixed, atau hard), dan `<commit>` adalah SHA1 hash dari commit yang ingin dibatalkan.
Berikut adalah beberapa contoh penggunaan Git reset:
Soft reset:
```code=
git reset --soft HEAD~
```
Ini akan membatalkan commit terakhir dan memindahkan pointer `HEAD` ke commit sebelumnya, tetapi mempertahankan perubahan pada working tree dan indeks.
Mixed reset:
```sh=
git reset HEAD~
```
Ini akan membatalkan commit terakhir dan memindahkan pointer `HEAD` ke commit sebelumnya, tetapi mempertahankan perubahan pada working tree dan menghapus perubahan pada indeks.
Hard reset:
```css=
git reset --hard HEAD
```
Ini akan membatalkan commit terakhir dan memindahkan pointer `HEAD` ke commit sebelumnya, serta menghapus semua perubahan pada working tree dan indeks.
Pastikan untuk membuat backup dari repositori Anda sebelum menjalankan perintah reset, karena perubahan yang dibatalkan tidak dapat dikembalikan.
### 2. Git Revert
Git revert adalah perintah Git yang digunakan untuk membatalkan perubahan dalam repositori Git dengan cara membuat commit baru yang mengambil alih efek dari commit sebelumnya. Ini berbeda dari git reset yang secara permanen menghapus perubahan dalam repositori. Git revert memungkinkan Anda untuk membatalkan perubahan tanpa kehilangan sejarah repositori.
Untuk menggunakan perintah Git revert, Anda dapat menjalankan perintah berikut dalam terminal atau Command Prompt:
```php=
git revert <commit>
```
Di mana `<commit>` adalah SHA1 hash dari commit yang ingin dibatalkan. Setelah perintah ini dijalankan, Git akan membuat commit baru yang mengambil alih efek dari commit yang dibatalkan.
Pastikan untuk membuat backup dari repositori Anda sebelum menjalankan perintah revert, meskipun perubahan yang dibatalkan tidak akan dihapus secara permanen.
Berikut adalah contoh penggunaan perintah Git revert:
```python=
# Menentukan commit yang ingin dibatalkan
git log
# Copy SHA1 hash dari commit yang ingin dibatalkan
git revert <commit-hash>
# Melakukan commit baru yang membatalkan perubahan
git commit -m "Revert commit <commit-hash>"
```
Ini akan membuat commit baru yang membatalkan perubahan yang diterapkan oleh commit dengan SHA1 hash `<commit-hash>`. Setelah itu, Anda dapat melakukan push ke remote repository untuk membagikan perubahan.
### 3. Git Cherry-Pick
Git cherry-pick adalah perintah Git yang digunakan untuk memilih dan menerapkan perubahan dari satu branch ke branch lain. Ini memungkinkan Anda untuk memilih commit tertentu dan mengaplikasikannya ke branch saat ini tanpa harus memperluas branch dan merge.
Untuk menggunakan perintah Git cherry-pick, Anda dapat menjalankan perintah berikut dalam terminal atau Command Prompt:
```php=
git cherry-pick <commit>
```
Di mana `<commit>` adalah SHA1 hash dari commit yang ingin dipilih. Setelah perintah ini dijalankan, Git akan menerapkan perubahan yang diterapkan oleh commit ke branch saat ini.
Pastikan untuk membuat backup dari repositori Anda sebelum menjalankan perintah cherry-pick, meskipun perubahan yang diterapkan tidak akan dihapus secara permanen.
### 4. Git Rebase
Git rebase adalah perintah Git yang digunakan untuk memodifikasi sejarah branch. Ini memungkinkan Anda untuk mengubah posisi branch saat ini sehingga menjadi anak dari branch lain atau branch baru. Git rebase juga memungkinkan Anda untuk menggabungkan perubahan dari branch lain ke branch saat ini dengan memindahkan commit branch saat ini ke atas perubahan branch lain.
Untuk menggunakan perintah Git rebase, Anda dapat menjalankan perintah berikut dalam terminal atau Command Prompt:
```php=
git rebase <upstream>
```
Di mana `<upstream>` adalah nama branch atau remote repository yang akan digunakan sebagai dasar untuk rebase. Setelah perintah ini dijalankan, Git akan memindahkan branch saat ini ke atas perubahan dari `<upstream>` dan menerapkan perubahan dari branch saat ini ke atas perubahan dari `<upstream>`.
Perintah Git rebase sangat berguna untuk menjaga sejarah branch yang bersih dan mudah dipahami. Namun, pastikan untuk membuat backup dari repositori Anda sebelum menjalankan perintah rebase, karena perubahan yang diterapkan oleh rebase dapat mengubah sejarah branch dan menyebabkan konflik.