---
# System prepended metadata

title: GIT Basic

---

# GIT Basic

## Prerequisite

### Command line basics

Gunakan

- Terminal (Mac dan Linux)
-  Git-bash (Windows)

Ganti folder 

```bash
cd <nama folder>
cd .. # naik 1 folder
```

Buat folder

```bash
mkdir <nama folder>
```

## Basic

### Config

```bash
git config --global user.name <nama>
git config --global user.email <email>
```

### Intialization

Jika sudah mempunyai repo

```bash
git clone <url> <nama folder>
# Contoh
git clone https://github.com/pemiluhmif/voting-booth.git voting
```

Jika belum

```bash
git init # di folder baru
```

### Add, Commit, Push (ACP)

```bash
git add <nama file>
git commit -m <commit name>
git push <remote> <branch>
```
Contoh
```bash
git add prima.py
git commit -m "Menambah penghitung bilangan prima"
git push origin master
```

### Pull
```bash
git pull <remote> <branch>
```

## Intermediate

### Remote and branch

#### Remote

Remote adalah nama lain dari server untuk git, saat bekerja dengan banyak orang, tentu kode butuh ada di internet (misal: github)

Secara default git (jika clone) akan membuat remote dengan nama `origin` (asal). Hal ini bisa dilihat dengan

```bash
git remote -v
```

Jika kosong, itu hal normal jika membuat git dengan cara `git init` karena defaultnya akan buat git repo offline.

Cara menambahkan
```bash
git remote add origin <url>
# contoh
git remote add origin https://github.com/pemiluhmif/voting-booth.git
```


#### Branch

Branch atau cabang pada git berguna untuk >1 orang mengerjakan kode yang sama dengan efektif.

Secara default branchnya adalah dengan nama `master`

#### Resolve conflict

Jika suatu file conflict 
```
CONFLICT (content): Merge conflict in <fileName>
Automatic merge failed; fix conflicts and then commit the result.
```
Maka kita harus betulkan konflik itu, caranya dengan membuka file yang konflik, edit, add, commit, push.

## Advanced

### Collaborative working

Misalkan ada sebuah repository yang ingin kalian edit, kalian tidak punya akses edit ke repo itu. Maka kalian harus `fork` repo tersebut

Nah lalu kalian tambahkan repo aslinya ke remote dengan nama bebas (biasanya `upstream`) 
```bash
git remote add upstream https://github.com/bimoadityar/Test-pull-request.git
```

Saat kalian pull, pull lah dari remote yang upstream, contoh
```bash
git pull upstream master
```
Perintah tersebut akan meng-pull dari repo aslinya

Akan tetapi saat push tetap ke origin yang merupakan milik kalian
```bash
git push origin master
```

Barulah setelah itu kalian buka github, ada pilihan, `new pull request`

## User story

Contohnya kamu punya file
```cpp
#include <iostream>

int main(){
    std::cout<<"Selamat datang di program ini"<<std::endl;
    std::cout<<"1+1 = "<<1+1<<std:endl;
    return 0;
}
```
Lalu ada kalian dan teman kalian, ingin menambahkan sapaan di bagian depan, masalahnya kalian kurang berkomunikasi, sehingga jadinya dua-duanya edit file tersebut untuk menambahkan sapaan, tapi kalian tambahkan halo sedangkan teman kalian hai. Teman kalian sudah push, saat kalian mau push, muncul pesan

```
To https://github.com/jrandiny/testTambah.git
! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/jrandiny/testTambah.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.
```
Kalian berpikir, "Oh ini error biasa, versi di server lebih baru, tinggal pull"

```bash
git pull origin master
```

Eh tapi malah muncul

```
CONFLICT (content): Merge conflict in tambah.cpp
Automatic merge failed; fix conflicts and then commit the result.
```

Tapi kalian sudah belajar di sekuro, cara resolve conflict

Kalian buka file tambah.cpp

```cpp
 <<<<<<< HEAD
 std::cout<<"Halo, selamat datang di program ini"<<std::endl;
 =======
 std::cout<<"Hai, selamat datang di program ini""<<std::endl;
 >>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:Menambahkan hai
``` 

Kalian betulkan dengan cara pilih yang mau dipakai (misalkan kalian mau jadinya halo hai)

```cpp
#include <iostream>

int main(){
    std::cout<<"Halo, Hai, Selamat datang di program ini"<<std::endl;
    std::cout<<"1+1 = "<<1+1<<std:endl;
    return 0;
}
```

Lalu kalian add, commit, dan push

Yay sudah tidak konflik