Lewati ke konten utama

20 Perintah Git Teratas dengan Contoh: Panduan Praktis

Panduan ini membahas perintah Git paling esensial beserta contoh untuk membantu Anda bekerja lebih efisien!
Diperbarui 16 Apr 2026  · 15 mnt baca

Git adalah alat penting bagi siapa pun yang bekerja dengan kode, baik Anda seorang pengembang perangkat lunak, ilmuwan data, data engineer, atau praktisi machine learning. Git memungkinkan tim berkolaborasi pada proyek yang sama secara bersamaan sambil menyediakan riwayat perubahan kode yang jelas, sehingga memudahkan pelacakan dan pengelolaan pembaruan.

Dalam artikel ini, saya akan memandu Anda melalui perintah-perintah Git yang paling umum digunakan, sintaksnya, dan cara menerapkannya dalam pekerjaan sehari-hari!

Perintah Git Dasar

Langkah dasar bekerja dengan Git mencakup membuat repositori, menyalin repositori yang sudah ada, dan mengedit kode. Bagian ini membahas secara rinci fungsi-fungsi git dasar tersebut, bersama sintaks untuk mengimplementasikannya. 

Perlu memasang Git? ikuti panduan ini untuk menginstal Git di sistem Anda.

git init

Perintah git init membuat repositori Git baru atau menginisialisasi ulang yang sudah ada.  

Saat Anda menjalankan perintah ini, direktori saat ini menjadi repositori Git, memungkinkan Anda melacak perubahannya. Git menambahkan folder tersembunyi .git di direktori tersebut, tempat Git menyimpan semua metadata, riwayat versi, dan log terkait proyek.

git clone

Untuk menyalin repositori Git dari satu lokasi ke lokasi lain, kita menggunakan perintah git clone. Biasanya menyalin repositori yang sudah ada, termasuk log dan versinya, dari server jarak jauh seperti GitHub atau GitLab ke mesin lokal Anda. 

Langkah 1: Buka repositori GitHub yang ingin Anda klon dan klik “Code”.

git clone command

perintah git clone

Langkah 2: Salin URL seperti pada gambar. 

git clone basic command

perintah dasar git clone

Langkah 3: Masuk ke direktori tempat Anda ingin mengklon repositori ini di mesin lokal dan jalankan perintah berikut: 

git clone <copied_URL>

git status

Perintah git status menampilkan detail tentang: 

  • modified files (file yang diubah tetapi belum di-stage).
  • untracked files (file yang tidak dilacak Git).
  • staged files (file yang sudah di-stage dan siap di-commit). 

Berikut sintaksnya:

git status 

 Git status command

Perintah Git status

git add

Perintah git add menambahkan perubahan Anda ke area staging. Ini memberi tahu Git bahwa repositori harus memperbarui perubahan ini setelah pengguna menjalankan perintah commit.

  • git add . : men-stage perubahan pada semua file. 
  • git add <file_name>: hanya memasukkan perubahan pada file tertentu ke area staging.

git commit

Perintah git commit menyimpan perubahan yang telah Anda buat (atau di-stage) ke repositori lokal. Setiap kali Anda menjalankan git commit, Git membuat snapshot repositori Anda pada saat itu. Ini memungkinkan Anda untuk kembali ke commit sebelumnya kapan pun diperlukan.

Berikut sintaksnya:

git commit -m "commit_message"

Pesan commit adalah deskripsi singkat tentang perubahan yang dilakukan dalam sebuah commit.

Bekerja dengan Repositori Remote

GitHub meng-host berbagai aplikasi di server jaraknya, memungkinkan pengembang untuk melacak dan mengelolanya. Pada bagian ini, kita akan melihat cara mengambil, mentransfer, dan berinteraksi dengan repositori remote tersebut menggunakan perintah Git. 

Ingin mempelajari cara kerja GitHub? Mulailah dengan Pengantar Konsep GitHub untuk memahami repositori, pull request, dan praktik kolaborasi terbaik.

git remote add

Perintah git remote add membuat koneksi antara repositori Git lokal Anda dan repositori Git remote, memungkinkan Anda melakukan push dan pull perubahan di antara keduanya:

git remote add <repo_name> <remote_url>
  • <repo_name>: nama panggilan untuk repositori remote (“origin” secara default).
  • <remote_url>: URL repositori remote.

git push

Perintah git push menyinkronkan repositori remote Anda dengan repositori lokal. Setelah Anda menjalankan perintah ini, repositori remote akan mencerminkan semua perubahan yang Anda commit secara lokal.

git push <remote> <branch>
  • <remote>: alias ke repositori remote (“origin” secara default).
  • <brach>: nama branch yang ingin Anda push.

Ada beberapa variasi git push, misalnya:

git push ---all origin

Perintah di atas mendorong semua branch lokal Anda ke repositori remote.

git push --force origin main

Perintah di atas menimpa branch main pada repositori remote dengan branch main lokal Anda. Berhati-hatilah saat menggunakannya, karena branch main remote dapat kehilangan seluruh riwayatnya. 

git pull

Perintah git pull mengambil dan menggabungkan perubahan di repositori remote dengan yang ada di repositori lokal. 

Perintah git pull menggabungkan dua perintah: git fetch dan git merge

Pertama, git fetch mengambil semua perubahan dari repositori remote, termasuk commit, tag, dan branch baru. Lalu, git merge dijalankan, mengintegrasikan perubahan tersebut ke branch lokal saat ini. 

Berikut sintaksnya:

git pull origin feature-branch

Perintah di atas mengambil data dari feature_branch pada repositori remote dan meng-commit-nya ke branch lokal Anda saat ini. 

git fetch

Perintah git fetch memungkinkan Anda meninjau perubahan di repositori remote sebelum menggabungkannya ke lokal. Perintah ini mengunduh perubahan dan memperbaruinya ke remote tracking branches. Bagi yang belum familiar, remote tracking branches adalah salinan branch repositori remote. 

Sebagai contoh, perintah berikut mengunduh perubahan di repositori remote dan memperbaruinya di remote tracking branches di bawah origin:

git fetch origin

Branching dan Merging di Git

Branching di Git memungkinkan pengembang bekerja secara mandiri pada fitur baru atau perbaikan bug tanpa memengaruhi repositori utama. Setelah perubahan siap, merging akan mengintegrasikannya ke basis kode utama. Mari kita jelajahi perintah kunci dalam proses ini.

git branch

Perintah git branch menampilkan, membuat, atau menghapus branch. Branch adalah versi lain dari repositori Anda. 

Jika Anda sedang mengembangkan fitur baru untuk aplikasi Anda, Anda dapat membuat dan bekerja pada branch baru.Anda dapat menggabungkan branch baru ini ke branch utama setelah perubahan siap dan diuji. Hal ini memungkinkan Anda bekerja pada fitur baru secara mandiri tanpa langsung mengacaukan garis utama. 

  • git branch: menampilkan daftar semua branch di repositori.
  • git branch <branch_name>: membuat branch baru bernama “branch_name”.
  • git branch -d <branch_name>: Menghapus branch bernama “branch_name”.

git checkout

Perintah git checkout dapat melakukan dua hal: beralih antar-branch atau memulihkan file ke keadaan sebelumnya. 

  • Beralih branch: Sebelum git 2.23, perintah git checkout branch_name digunakan untuk beralih dari branch saat ini ke branch lain. Namun tidak hanya untuk beralih dari yang ada; Anda juga dapat membuat dan beralih ke branch baru.

Perintah berikut membuat branch baru bernama “feature_branch” dan beralih ke sana:

git checkout -b feature_branch

Namun, pada versi Git terbaru, git checkout digantikan dengan git switch untuk memulihkan file. 

  • Memulihkan file: Anda dapat membuang perubahan yang telah Anda buat pada sebuah file dan mengembalikannya ke versi sebelumnya dengan perintah berikut.
git checkout -- <file-name>

Anda juga bisa melakukannya dengan file dari branch lain sebagai berikut:

git checkout <branch-name> -- <file-name>

git merge

Jika Anda telah melakukan beberapa pekerjaan di branch baru, Anda dapat menggabungkannya ke branch utama menggunakan git merge untuk menerapkan perubahan. Git melakukan merge dengan dua cara:

  • Fast forward merge: Misalkan Anda membuat branch baru bernama "feature_x" dari branch utama dan bekerja di sana. Jika branch utama tidak memiliki pembaruan sejak Anda membuat "feature_x", maka alih-alih meng-commit perubahan “feature_x” ke branch utama, Git memperbarui branch utama untuk menunjuk ke versi terbaru dari "feature_x." Dalam kasus ini, tidak ada merge commit baru yang dibuat. 
  • Three-way merge: Jika baik “feature_x” maupun branch utama memiliki suntingan, Git menggabungkan perubahan dan membuat merge commit baru pada branch utama. 

Sebagai contoh: 

      C---D---F (feature-branch)
     /
A---B---E---G (main)

Pada commit B, branch fitur C dibuat. Branch utama memiliki commit tambahan, E dan G, bahkan setelah membuat branch fitur. Karena itu, fitur digabungkan ke main, menghasilkan merge commit baru M sebagai berikut:

      C---D---F (feature-branch)
     /         \         
A---B---E---G---M (main)

git rebase

git rebase adalah cara lain untuk mengintegrasikan perubahan antar-branch, tetapi bekerja berbeda dibandingkan git merge. Merge mempertahankan riwayat lengkap dari branch main dan fitur. Sementara itu, rebase menimpa riwayat commit agar terlihat linear dan rapi.

Selain itu, merge memerlukan commit merge tambahan, sedangkan rebase tidak membuat commit baru. Git rebase melakukan dua langkah: 

  1. Beralih ke branch fitur 
  2. Rebase ke main.

Sebagai contoh:

      C---D---F (feature-branch)
     /
A---B---E---G (main)
  • Langkah 1: jalankan git checkout feature_branch.
  • Langkah 2: Jalankan git rebase main: Memindahkan seluruh branch fitur ke atas branch main dengan menerapkan ulang commit C, D, F sebagai C’, D’, dan F’ di atas commit terbaru G pada branch main. Ini menciptakan riwayat commit linear sebagai berikut:
A---B---E---G---C'---D'---F' (main)

Karena operasi merge dan rebase sering membingungkan, berikut ringkasan perbedaannya:

Merge 

Rebase

Mempertahankan seluruh riwayat commit dari kedua branch.

Menimpa riwayat commit agar menjadi linear.

Dibuat commit merge tambahan.

Tidak ada commit tambahan yang dibuat.

Struktur branch terlihat dalam riwayat.

Membuat riwayat commit terlihat seperti garis lurus.

Gunakan untuk melacak riwayat commit tiap branch, termasuk linimasa kapan mereka digabung.

Gunakan saat Anda memerlukan riwayat commit yang jelas dan mudah dipahami. 

Ingin belajar lebih banyak tentang bekerja dengan branch remote? Pelajari cara checkout dan melacak branch remote menggunakan git checkout dalam tutorial langkah demi langkah ini.

Riwayat Git dan Membatalkan Perubahan

Git menyediakan beberapa perintah untuk melihat riwayat dan membatalkan perubahan pada berbagai tahap pengembangan. Perintah yang relevan dibahas di sini. 

git log

Perintah git log menampilkan seluruh riwayat commit dari branch Anda saat ini. Ini mencakup empat bidang utama: commit, penulis, tanggal, dan pesan commit. 

git commit history

riwayat git commit

  • Commit: ID unik.
  • Author: nama dan email orang yang melakukan commit.
  • Date: Stempel waktu ketika perubahan di-commit.
  • Commit message: deskripsi commit. 

git diff

Perintah git diff menampilkan perbedaan antara berbagai keadaan repositori Anda—apakah Anda membandingkan direktori saat ini dengan area staging, area staging dengan commit terakhir, atau bahkan dua file atau branch, sesuai yang Anda tentukan.

  • git diff - menampilkan perbedaan antara direktori kerja saat ini dan area staging. 
  • git diff -- cached: menampilkan perbedaan antara area staging dan commit terakhir.
  • git diff commit1 commit2 - perbedaan antara commit 1 dan commit 2.
  • git diff branch1..branch2 - membandingkan perbedaan antara branch 1 dan branch 2.

git reset

Perintah git reset memungkinkan Anda membatalkan perubahan dengan mengatur ulang HEAD saat ini ke keadaan sebelumnya tertentu. Untuk memindahkan HEAD ke commit sebelumnya, Anda memiliki tiga variasi: “soft”, “mixed”, dan “hard” untuk digunakan dengan perintah reset. 

  • Soft: kembali ke commit sebelumnya tetapi mempertahankan perubahan saat ini di-stage, memungkinkan Anda meng-commit ulang nanti bila diperlukan. 

git reset --soft HEAD~1

  • Mixed: kembali ke commit sebelumnya dan menghapus perubahan commit saat ini dari area staging. Namun, perubahan tersebut tetap ada di direktori kerja Anda.

git reset --mixed HEAD~1

  • Hard: Mengarah ke commit sebelumnya sambil menghapus pembaruan commit saat ini dari direktori kerja dan area staging. 

git reset --hard HEAD~1

Perlu membatalkan perubahan di Git? Jelajahi perbedaan antara git reset dan git revert dalam pandu an mendetail ini.

Git Stashing dan Pembersihan

Saat bekerja di Git, Anda mungkin perlu menaruh sementara perubahan tanpa meng-commit-nya atau membersihkan file yang tidak perlu yang memenuhi repositori Anda. Di sinilah perintah Git stashing dan pembersihan berguna.

git stash

Misalkan Anda ingin kembali ke keadaan sebelumnya tetapi tidak ingin meng-commit progres saat ini; Anda dapat menggunakan git stash. Ini menyimpan perubahan yang belum di-commit secara sementara dan mengatur ulang direktori kerja Anda ke keadaan commit terakhir. 

git stash pop

Jika Anda pernah melakukan stash perubahan dan ingin memasukkannya ke direktori kerja Anda, gunakan perintah git stash pop. Ini akan menerapkan perubahan stash terbaru ke direktori saat ini dan menghapusnya dari daftar stash. 

git clean

Perintah git clean menghapus file yang tidak dilacak dari repositori Git. Gunakan perintah git clean -n untuk melihat pratinjau apa yang akan dihapus sebelum mengeksekusi perintah bersih!

Ingin merapikan riwayat Git Anda? Pelajari cara menggabungkan beberapa commit menjadi satu dengan tutorial Git squash ini.

Konfigurasi Git dan Pengaturan Pengguna

Git memungkinkan Anda mengonfigurasi pengaturan pengguna pada level yang berbeda. Mari kita bahas di sini.

git config

Perintah git config memungkinkan Anda menyesuaikan pengaturan Git sesuai kebutuhan. Anda dapat mengonfigurasi pengaturan pada tiga level: lokal, sistem, dan global. 

  • Level sistem: Ini adalah level konfigurasi terluas dengan akses level root.
  • Level global: konfigurasi pada level ini diterapkan ke semua repositori untuk pengguna saat ini. 
  • Level lokal: Pengaturan yang relevan dengan repositori Git saat ini dapat disesuaikan pada level ini. 

Berikut beberapa perintah git config yang umum:

  • git config -list: Menampilkan pengaturan Git di semua level.
  • git config --global user.name "Your_name": Mengatur nama pengguna Git untuk semua repositori di sistem Anda menjadi “Your_name”.
  • git config --global user.email "your.email@example.com": Mengatur alamat email untuk semua repositori di sistem Anda.

Kita tahu bahwa master adalah branch utama default saat menginisialisasi repositori Git. Namun Anda dapat menggantinya dengan apa pun yang Anda inginkan menggunakan perintah berikut:

git config --global init.defaultBranch "srujana_master"

Pada perintah di atas, kami mengganti branch master default dengan "srujana_master" pada level global (untuk semua repositori di sistem).

Anda dapat menerapkan pengaturan level global lainnya. Misalnya, untuk mengubah editor teks default Anda ke VS Code, jalankan perintah berikut:

git config -global core.editor "code-w"

Anda juga bisa membuat perintah Git sendiri. Misalnya:

git config --global alias.slice branch

Perintah di atas membuat alias baru slice untuk branch. Jadi, jika Anda ingin membuat branch baru, Anda dapat menjalankan git slice branch_name alih-alih git branch branch_name.

Ringkasan Perintah Git

Berikut ringkasan perintah Git yang telah kita jelajahi agar mudah Anda gunakan:

Perintah

Deskripsi

Contoh penggunaan

git init

Inisialisasi repositori Git baru.

git init

git clone

Mengklon repositori Git yang sudah ada.

git clone <repository_url>

git status

Memeriksa status file di direktori kerja.

git status

git add

Menambahkan file ke area staging.

git add <file_name>

git commit

Meng-commit perubahan yang di-stage ke repositori lokal.

git commit -m 'Commit message'

git remote add

Menambahkan koneksi repositori remote.

git remote add origin <remote_url>

git push

Mendorong perubahan yang di-commit ke repositori remote.

git push origin <branch_name>

git pull

Mengambil dan menggabungkan perubahan dari repositori remote.

git pull origin <branch_name>

git fetch

Mengambil perubahan dari repositori remote tanpa menggabungkan.

git fetch origin

git branch

Menampilkan, membuat, atau menghapus branch.

git branch <branch_name>

git checkout

Beralih antar-branch atau memulihkan file (metode lama).

git checkout <branch_name>

git switch

Beralih antar-branch (lebih disarankan pada versi terbaru).

git switch <branch_name>

git merge

Menggabungkan perubahan dari satu branch ke branch lain.

git merge <branch_name>

git rebase

Menerapkan ulang commit dari satu branch ke branch lain untuk riwayat yang lebih rapi.

git rebase <branch_name>

git log

Melihat riwayat commit.

git log

git diff

Menampilkan perbedaan antara berbagai keadaan repositori.

git diff

git reset

Membatalkan perubahan dengan mengatur ulang HEAD ke keadaan sebelumnya.

git reset --soft HEAD~1

git stash

Menyimpan sementara perubahan yang belum di-commit dan mengatur ulang direktori kerja.

git stash

git stash pop

Menerapkan perubahan stash terbaru ke direktori kerja.

git stash pop

git clean

Menghapus file yang tidak dilacak dari repositori.

git clean -n

git config

Mengonfigurasi pengaturan Git pada level sistem, global, atau lokal.

git config --global user.name 'Your Name'

Praktik Terbaik Menggunakan Git

Menggunakan Git secara efektif tidak hanya soal melacak perubahan—ini tentang menjaga alur kerja yang bersih, terstruktur, dan kolaboratif. Mengikuti praktik terbaik membantu memastikan repositori Anda tetap terorganisasi, riwayat commit Anda bermakna, dan proses pengembangan berjalan lancar.

Berikut beberapa kebiasaan kunci yang perlu diterapkan saat bekerja dengan Git:

  • Sering melakukan commit: Salah satu tujuan utama menggunakan kontrol versi seperti Git adalah melacak perubahan secara efektif dari waktu ke waktu. Saat Anda meng-commit setiap perubahan secara terpisah alih-alih menggabungkan banyak perubahan sekaligus, akan lebih mudah memahami apa yang diubah pada masing-masing commit di kemudian hari. 
  • Gunakan pesan commit yang jelas: Setiap kali Anda melakukan commit, sertakan pesan yang jelas yang menjelaskan isi commit tersebut. Saat Anda menelusuri commit di lain waktu, akan jauh lebih mudah mengetahui perubahan apa yang dilakukan tiap commit terhadap kode. 
  • Gunakan branch: Untuk fitur baru atau perbaikan bug apa pun, buat branch, kerjakan di sana, lalu gabungkan. Ini adalah praktik terbaik untuk memisahkan pekerjaan pengembangan baru dari proyek utama. 
  • Manfaatkan .gitignore: File .gitignore berisi file dan direktori terkait proyek yang tidak perlu dilacak. Ini biasanya mencakup file yang dihasilkan otomatis, artefak build, log, file sementara, dan file khusus platform. Mengabaikannya akan menghindari log dan pelacakan versi yang tidak perlu, sehingga riwayat Anda tetap bersih.

Kesimpulan

Git adalah alat yang andal untuk melacak perubahan, berkolaborasi dengan orang lain, dan menjaga alur kerja pengembangan yang terstruktur dengan baik. Dalam artikel ini, saya membahas perintah-perintah Git penting dan praktik terbaik untuk membantu Anda mengelola proyek dengan lebih efektif.

Tentu saja, selalu ada lebih banyak hal untuk dipelajari! Jika Anda baru memulai, lihat Pengantar Git untuk membangun fondasi yang kuat. Bagi yang ingin menyempurnakan keterampilan lebih lanjut, Git Menengah membahas lebih dalam alur kerja dan teknik lanjutan.

Butuh referensi Git cepat untuk proyek mendatang? Simpan perintah penting dengan mudah menggunakan lembar contekan Git ini!

FAQs

Apa perbedaan antara git pull dan git fetch?

git pull mengambil perubahan dari repositori remote dan menggabungkannya ke branch lokal Anda, sedangkan git fetch hanya mengunduh pembaruan, memungkinkan Anda meninjaunya sebelum melakukan merge.

Bagaimana cara mengganti nama branch Git?

Untuk mengganti nama branch saat ini:

git branch -m new-branch-name

Jika mengganti nama branch lain:

git branch -m old-branch-name new-branch-name

Bagaimana cara menghapus branch di Git?

Untuk menghapus branch lokal:

git branch -d branch-name

Untuk menghapus branch remote:

git push origin --delete branch-name

Apa perbedaan antara git merge dan git rebase?

git merge menggabungkan perubahan dari berbagai branch sambil mempertahankan riwayat, sedangkan git rebase menulis ulang riwayat commit untuk membuat urutan yang lebih rapi dan linear.

Bisakah saya membatalkan git commit?

Ya! Untuk membatalkan commit terakhir tetapi mempertahankan perubahan di area staging:

git reset --soft HEAD~1

Untuk membatalkan commit terakhir dan menghapus perubahan dari staging:

git reset --mixed HEAD~1

Untuk membuang perubahan sepenuhnya:

git reset --hard HEAD~1

Bagaimana cara memeriksa saya sedang berada di branch yang mana?

Jalankan:

git branch --show-current

Atau cukup:

git status

Bagaimana cara membatalkan perubahan pada satu file?

Untuk membuang perubahan yang belum di-stage pada sebuah file:

git checkout -- filename

Untuk mengembalikan file ke keadaan commit terakhir:

git restore filename

Bagaimana cara menampilkan semua branch remote dalam repositori Git?

Gunakan:

git branch -r

Bagaimana cara melakukan force push sebuah branch di Git?

Berhati-hatilah saat melakukan force push, karena akan menimpa perubahan di remote:

git push --force origin branch-name

Bagaimana cara melihat riwayat Git saya dalam bentuk grafis?

Jika Anda menginginkan visualisasi riwayat commit seperti grafik:

git log --oneline --graph --all --decorate

Srujana Maddula's photo
Author
Srujana Maddula
LinkedIn

Srujana adalah penulis lepas di bidang teknologi dengan gelar sarjana Ilmu Komputer. Menulis tentang berbagai topik, termasuk data science, komputasi awan, pengembangan, pemrograman, keamanan, dan banyak lainnya adalah hal yang alami baginya. Ia menyukai sastra klasik dan menjelajahi destinasi baru.

Topik

Pelajari lebih lanjut tentang Git dengan kursus-kursus ini!

Program

GitHub Foundations

10 Hr
Siapkan diri Anda untuk Sertifikasi GitHub Foundations dengan mempelajari dasar-dasar Git dan GitHub: pengendalian versi, kolaborasi, dan cabang.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

12 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

Lihat Lebih BanyakLihat Lebih Banyak