Belajar Perintah Dasar Git sebagai Version Control System dan Cara Hosting Repository di Github

git Nov 18, 2019

Bagi anda developer, menguasai Git merupakan sebuah kewajiban jika anda mengerjakan project dengan kerjasama tim, akan sangat susah mendeteksi perubahan/penambahan fitur dalam project yang dikerjakan beramai-ramai tanpa bantuan Version Control System (VCS) seperti Git misalnya. untuk installasi pada laptop sudah dibahas pada artikel Persiapan Konfigurasi Environment di Linux Untuk Developer Website. pada artikel ini kita akan mencoba menggunakan perintah-perintah dasar git.

Konfigurasi Git

Untuk langkah awal, jalankan perintah untuk konfigurasi git berikut ini :

#cek versi git
git --version

#tambahkan config global untuk username dan email
git config --global user.name "username-anda"
git config --global user.email email-anda@gmail.com

#cek list config
git config --list

#output
user.email=email-anda@gmail.com
user.name=username-anda
(END)
git config --global setting

Membuat Repository Local

jika sudah menambahkan config, saatnya kita membuat repository local, lakukan perintah berikut pada command line anda.

#membuat repository "belajar-git"
git init belajar-git
#output
Initialized empty Git repository in /home/naja/MyData/NajaProject/belajar-git/.git

#pindah direktori
cd belajar-git

#buat .gitignore file untuk list file yang diabaikan
nano .gitignore

#contoh isi, kemudian simpan
/vendor/
/upload/
/cache

#cek status git dengan perintah
git status

#output
On branch master

No commits yet

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

        .gitignore

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

Nah kita sudah sukses membuat repository dan membuat sebuah file, didalam git version control, terdapat 3 jenis kondisi file :

  1. Modified
    sudah terjadi perubahan pada suatu file, namun belum ditambahkan kedalam version control git
  2. Staged
    sudah ditandai git, namun belum disimpan dalam version control git
  3. Commited
    sudah di commit, file sudah disimpan dalam version control git, selanjutnya dapat dimerge atau lain sebagainya

pada contoh diatas, kita membuat file dan belum menandainya.

Merubah Kondisi File Ke Staged

Sebagai contoh, kita buat terlebih dahulu beberapa file, misal latihan1.php, latihan2.php, lalu modifikasi file ini untuk kita rubah statusnya ke staged. Untuk menandai file yang sudah kita modifikasi ke status staged, adalah sebagai berikut :

#buat file, dan modifikasi.
nano latihan1.php
nano latihan2.php

#setelah file dimodifikasi, jalankan perintah berikut untuk menandai
git add latihan1.php
git add latihan2.php

#atau dalam satu perintah
git add latihan1.php latihan2.php

#atau menandai semua file dengan extensi .php
git add *.php

#atau menandai semua file
git add .

#cek statusnya
git status

#output
On branch master

No commits yet

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

        new file:   .gitignore
        new file:   latihan1.php
        new file:   latihan2.php
git change to staged file

Merubah Kondisi File ke Commited

Untuk menyimpan file yang sudah kita tandai ke version control git, kita harus merubah status file menjadi commited, untuk merubahnya sebagai berikut :

#melakukan git commit
git commit -m "Commit pertama"   

#output
[master (root-commit) dd0ad1a] Commit pertama
 3 files changed, 5 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 latihan1.php
 create mode 100644 latihan2.php

#cek git status
git status

#output
On branch master
nothing to commit, working tree clean
git change to commited file

pada kondisi ini, semua file sudah di commit ke version control git, jika kita memodifikasi file lagi, maka status filenya menjadi modified, kita harus merubah ke staged dan ke commit.

#merubah latihan1.php
nano latihan1.php

#edit menjadi seperti ini
Belajar Latihan 1
ini perbaikan kedua

#cek git status
git status

#output
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   latihan1.php

no changes added to commit (use "git add" and/or "git commit -a")

#rubah status ke staged
git add latihan1.php

#rubah status ke commited
git commit -m "Perubahan pada latihan1.php"

#output
[master f7e48c3] Perubahan pada latihan1.php
 1 file changed, 1 insertion(+)

#cek lagi git status
git status

#output
On branch master
nothing to commit, working tree clean
git commit selesai

begini seterusnya, jika ada perubahan dan selesai commit, kita dapat melihat log aktifitasnya dengan perintah git log

#cek log perubahan
git log

#output
commit f7e48c328a17c3b97d0034e38c62d67bb1b41b89 (HEAD -> master)
Author: najcardboyz <najcardboyz.03@gmail.com>
Date:   Tue Jan 22 11:07:07 2019 +0800

    Perubahan pada latihan1.php

commit dd0ad1a6f842f60d9325449cf592bc1ab4b885ad
Author: najcardboyz <najcardboyz.03@gmail.com>
Date:   Tue Jan 22 10:55:57 2019 +0800

    Commit pertama
(END)

#untuk versi singkat dapat ditambahkan argument --oneline
git log --oneline

#output
f7e48c3 (HEAD -> master) Perubahan pada latihan1.php
dd0ad1a Commit pertama
(END)

#cara-cara lain melihat log
#log ver version 
git log dd0ad1a6f842f60d9325449cf592bc1ab4b885ad

#log ver author
git log --author='najcardboyz'

#log branch dan namanya
git log --graph --oneline --decorate --all
git log

Melihat Perbedaan/Perubahan File dengan Git Diff

Untuk mengetahui perbedaan file yang sudah kita modifikasi sebelumnya, kita dapat menggunakan perintah git diff, bisa dengan nama file atau id commit yang ingin dilihat. berikut contohnya :

#melihat log untuk mengambil nomor revisi
git log

#kemudian ambil nomor revisinya, dan git diff
git diff dd0ad1a6f842f60d9325449cf592bc1ab4b885ad f7e48c328a17c3b97d0034e38c62d67bb1b41b89

diff --git a/latihan1.php b/latihan1.php
index 24b7435..f721918 100644
--- a/latihan1.php
+++ b/latihan1.php
@@ -1 +1,2 @@
 Belajar Latihan 1
+ini perbaikan kedua
git diff

simbol (+) artinya penambahan kode (-) artinya dihapus

Membatalkan Perubahan pada Git

git mencatat setiap perubahan kode yang kita lakukan, sesuai dengan tugasnya sebagai version control, jika suatu saat kita ingin mengembalikan perubahan yang sudah kita lakukan pada proyek kita. dapat menggunakan perintah-perintah berikut :

#membatalkan perubahan pada file, sebelum GIT ADD
-------------------------------------------------------------------------
git checkout latihan1.php

#membatalkan perubahan pada file, sesudah GIT ADD
#harus di GIT RESET terlebih dahulu
-------------------------------------------------------------------------
git reset latihan1.php
git checkout latihan1.php

#membatalkan perubahan yang sudah di COMMIT
#setelah git checkout, file dalam kondisi staged
-------------------------------------------------------------------------
#git log ambil id commit, dan file
git checkout dd0ad1a6f842f60d9325449cf592bc1ab4b885ad latihan1.php

#untuk membatalkan kondisi staged (hati-hati dengan perintah reset)
#git reset menghilangkan histori perubahan sebelum perintah git reset
git reset latihan1.php

#kembalikan semua file ke kondisi commit tertentu
git checkout dd0ad1a6f842f60d9325449cf592bc1ab4b885ad

#membatalkan ke 3 commit sebelumnya
-------------------------------------------------------------------------
git checkout HEAD~3 script.php


#membatalkan semua perubahan ke id commit tertentu
-------------------------------------------------------------------------
git revert -n dd0ad1a6f842f60d9325449cf592bc1ab4b885ad
git revert

git reset adalah membatalkan perubahan / mengembalikan kondisi file ke sebelumnya, dan menghapus histori/catatan commit sesudahnya sebelum direset. sedangkan git revent adalah mengembalikan kondisi file ke sebelumnya, dan tidak menghapus histori/catatan commit sesudahnya.

Membuat dan Menggabungkan Branch pada Git

Branch berguna jika ada banyak orang yang mendevelop sebuah sistem, misal si A membuat fitur login, si B membuat fitur register, agar tidak bentrok saat mengerjakan bersama-sama, gunakan branch sebagai cabang dari setiap fitur yang akan dibuat.

#membuat branch login dan register
git branch login
git branch register

#melihat branch
git branch
#output
  login
* master
  register

#tanda bintang menandakan branch aktif
#pindah ke branch tertentu
git checkout login
#output
Switched to branch 'login'
#cek branch lagi
git branch
#output
* login
  master
  register
git branch

saat branch login aktif, maka ketika kita memodifikasi sebuah file, akan tersimpan pada branch tersebut, jika kita kembali ke branch master, maka kita tidak akan melihat perubahan sebelumnya yang dilakukan pada branch login. jika kita sudah selesai dengan branch dan ingin menggabungnya, maka gunakan perintah git merge seperti berikut :

#saat di branch login, commit perubahan, lalu kembali ke branch master
git branch master

#gabungkan branch login (dari branch master)
git merge login

#jika terjadi bentrok file disini, perbaiki file/scriptnya manual, 
#lakukan git add file yang bentrok
#lakukan git commit

#jika selesai, delete branch login
git branch -d login
git branch merge

Upload ke Github.com

agar dapat kolaborasi, tentu harus ada yang bertindak sebagai git server, lebih mudah menggunakan layanan pihak ketiga sebagai servernya, contohnya github.com atau bitbucket.com, atau jika mau memasang server git sendiri ke server yang kita punya menggunakan gitlab.

di artikel sebelumnya Membuat Repository di Github dan Menambahkan Collabolator untuk Kerja Team sudah dicontohkan membuat private repository dan menambahkan collabolator maksimal 3 orang, atau unlimited contribotor jika repository bersifat public.

copy terlebih dahulu link repository yang akan kita gunakan

git push github

kemudian pada terminal di proyek git kita jalankan perintah berikut :

#tambahkan repository kosong yang dibuat di github
git remote add origin https://github.com/najcardboyz/belajar-git.git

#cek remote yang tersedia
git remote -v
#output
origin  https://github.com/najcardboyz/belajar-git.git (fetch)
origin  https://github.com/najcardboyz/belajar-git.git (push)

#mengirimkan revisi ke server remote dengan perintah
#git push origin “nama branch”, misal master
git push origin master

#output
Username for 'https://github.com': {isi username github}
Password for 'https://najcardboyz@github.com': {isi password github}
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 763 bytes | 763.00 KiB/s, done.
Total 9 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/najcardboyz/belajar-git.git
 * [new branch]      master -> master
git push origin master

Download Github.com

Jika kita mau mendownload dari github utuk melakukan kerja team, maka menggunakan perintah git clone, berikut caranya :

git clone https://github.com/najcardboyz/belajar-git.git
#output
Cloning into 'belajar-git'...
Username for 'https://github.com': {isi username github}
Password for 'https://najcardboyz@github.com': {isi password github}
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 9 (delta 1), reused 9 (delta 1), pack-reused 0
Unpacking objects: 100% (9/9), done.

#lalu melakukan revisi dan tandai semua file ke status staged
git add .

#lakukan commit
git commit -m "keterangan"

#push kembali ke github branch master
git push origin master
git clone from github

Mengambil Commit Terbaru dari remote Github

Jika anda sudah punya local repository, dan remote repository, kemudian dalam kasus ini sudah ada perubahan di remote, misal membuat readme file di github dan melakukan commit, anda ingin mengambil perubahan di remote untuk ditambahkan ke local repository, berikut langkah-langkahnya :

#ada dua cara, yaitu 
#git pull akan commit dari remote lalu merge (jika tidak ada commit di local)
#git fetch akan commit dari remote, tidak di merge (jika ada commit di local, mencegah bentrok)
git pull origin master 
git fetch origin master 

#contoh misal git fetch
git fetch origin master 
#output
Username for 'https://github.com': {isi username github}
Password for 'https://najcardboyz@github.com': {isi password github}
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/najcardboyz/belajar-git
 * branch            master     -> FETCH_HEAD
   4e1df31..7e5b33b  master     -> origin/master

#merge dengan branch origin master
#pindah ke branch master local dulu
git checkout master
#merge branch dari origin master
git merge master origin/master
output
Updating 4e1df31..7e5b33b
Fast-forward
 README.md | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 README.md
git commit ke github

jika terjadi error fatal : refusing to merge unrelated histories saat mencoba merge database dan website ke server , maka solusi mudahnya adalah maka anda terlebih tambahkan parameter --allow-unrelated-histories

#pindah ke repository master di local 
git checkout master

#download dari github, force perbolehkan unrelated history
git pull origin master --allow-unrelated-histories
git pull github

Git Commit untuk Multiple Branch

terkadang, commit terakhir kita pada suatu branch sama dengan branch lain, untuk melakukannya, kita bisa commit pada branch A, kemudian pindah ke branch B, dan lakukan perintah cherry-pick untuk copy commit sebelumnya (terakhir) dari branch yang ingin dicopy.

#pindah ke branch yang akan dicopy
git checkout branch-A

#lakukan perubahan dan commit
git commit -m "perbaikan pada branch A"

#pindah ke branch baru yang ingin disamakan
git checkout branch-B

#lakukan perintah cherry-pick ke branch A
git cherry-pick branch-A
git commit multiple branch

Dengan sering latihan dan uji coba, akan memudahkan dalam menggunakan git, bahkan akan sangat berguna sekali bagi developer. menggunakan git merupakan syarat utama untuk kerja dengan team.

M. Najamudin Ridha

Penikmat coffe cappucino ice, apalagi tanpa gula. Menyukai teknologi open source, terutama yang berbasis web dan mobile, senang mencoba hal - hal seperti linux, sysadmin, database dan programming