Daftar isi
Kata Pengantar1. Mengkonfigurasi git....
1.1 File Konfigurasi....
1.2 Pengaturan default....
1.3 Alias2. Dasar-dasar git....
2.1 Membuat repositori....
2.2 Status File....
2.3 Bekerja dengan indeks....
2.4 Bekerja dengan komitmen....
2.5 Lihat Riwayat....
2.6 Bekerja dengan repositori jarak jauh3. Bercabang di git....
3.1 Operasi dasar....
3.2 Penggabungan cabang....
3.3 Rerere4. Pointer di git....
4.1 Pointer bergerak5. Bacaan yang disarankanKata Pengantar
Git adalah sistem kontrol versi terdistribusi yang paling populer.
[1] [2]Tujuan utama Git adalah untuk menyimpan snapshot dari kondisi proyek Anda yang terus meningkat secara progresif (Pro git, 2019).
Artikel ini ditujukan bagi mereka yang memiliki setidaknya pengetahuan dasar dan keterampilan dalam bekerja dengan git dan yang ingin memperluas pengetahuan mereka.
Hanya aspek teknis dari git yang dipertimbangkan di sini, untuk perendaman yang lebih rinci dalam filosofi git dan implementasi internalnya, saya menyarankan Anda untuk membaca beberapa buku yang bermanfaat (lihat
Bacaan yang Disarankan ).
1. Mengkonfigurasi git
Sebelum Anda mulai bekerja dengan git, Anda perlu mengkonfigurasinya sendiri!
1.1 File Konfigurasi
- / etc / gitconfig - Pengaturan umum untuk semua pengguna dan repositori
- ~ / .gitconfig atau ~ / .config / git / config - Pengaturan pengguna khusus
- .git / config - Pengaturan untuk repositori tertentu
Ada tim khusus
git config [<>]
yang akan memungkinkan Anda untuk mengubah perilaku standar git, jika perlu, tetapi Anda dapat mengedit file konfigurasi secara manual (saya pikir lebih cepat).
Bergantung pada parameter yang Anda berikan ke perintah git config (--system, --global, --local), pengaturan akan ditulis ke salah satu file ini. Masing-masing "level" ini (sistem, global, lokal) mengubah nilai dari level sebelumnya!
Untuk melihat di file mana pengaturan apa yang diinstal, gunakan git config --list --show-origin.
Mengabaikan fileDi git, Anda memutuskan file mana yang akan masuk ke komit, tetapi mungkin Anda ingin file tertentu tidak pernah ada dalam indeks dan komit, dan bahkan tidak muncul dalam daftar yang tidak terlacak. Untuk melakukan ini, Anda dapat membuat file khusus (.gitignore) di repositori Anda dan menulis templat file yang diabaikan di sana. Jika Anda tidak ingin membuat file seperti itu di setiap repositori, Anda dapat mendefinisikannya secara global menggunakan core.excludesfile (lihat
Pengaturan yang Berguna ). Anda juga dapat mengunduh
file .gitignore yang sudah jadi untuk bahasa pemrograman yang sedang Anda kerjakan.
Untuk menyesuaikan .gitignore, gunakan
bash regular expressions .
1.2 Pengaturan Default
Ada banyak pengaturan git untuk server dan klien, hanya pengaturan klien dasar yang akan dipertimbangkan di sini.
Gunakan
git config name value
di mana nama adalah nama parameter, dan nilainya adalah nilainya untuk mengatur pengaturan.
Contoh:
git config --global core.editor nano
akan menginstal nano editor default.
Anda dapat melihat nilai parameter yang ada dengan konfigurasi git - dapatkan [nama] di mana nama adalah parameter yang nilainya ingin Anda peroleh.
Pengaturan yang berguna:- user.name - Nama yang akan digunakan saat membuat komit
- user.email - Email untuk digunakan saat membuat komit
- core.excludesfile - File yang templatnya akan digunakan untuk mengabaikan file tertentu secara global
- core.editor - Editor default
- commit.template - File yang isinya akan digunakan untuk pesan komit default (Lihat Bekerja dengan komit ).
- help.autocorrect - Ketika diatur ke 1, git akan menjalankan perintah yang salah ditulis.
- credential.helper [mode] - Mengatur mode penyimpanan kredensial. [cache] - kredensial disimpan untuk periode tertentu, kata sandi tidak disimpan (--timeout [detik] jumlah detik setelah data dihapus, standarnya adalah 15 menit). [store] - kredensial disimpan untuk waktu tanpa batas di tempat yang jelas (--file [file] menunjukkan path untuk menyimpan data, secara default ~ / .git-kredensial).
1.3 Alias
Jika Anda tidak ingin mencetak setiap perintah untuk Git secara keseluruhan, Anda dapat dengan mudah mengonfigurasi alias. Untuk membuat alias gunakan:
git config alias.SHORT_NAME COMMAND
di mana SHORT_NAME adalah nama untuk disingkat, dan PERINTAH perintah untuk disingkat. Contoh:
git config --global alias.last 'log -1 HEAD'
setelah menjalankan perintah ini, Anda dapat melihat informasi tentang komit terakhir pada cabang saat ini dengan menjalankan git terakhir.
Saya menyarankan Anda untuk menggunakan singkatan berikut (Anda juga dapat mendefinisikan sendiri):
- st = status
- ch = checkout
- br = cabang
- mg = gabung
- cm = komit
- reb = rebase
- lg = "git log --pretty = format: '% h -% ar:% s'β
Untuk melihat pengaturan konfigurasi, gunakan: git config --list.
2. Dasar-dasar git
Hanya parameter wajib dan berguna (menurut saya) yang tercantum di sini, karena daftar semua tidak pantas. Untuk melakukan ini, gunakan perintah git -help atau --help, di mana perintah adalah nama perintah untuk bantuan yang ingin Anda terima.
2.1 Membuat repositori
- git init [<options>] - Membuat repositori git dan direktori .git di direktori saat ini (atau dalam direktori yang ditentukan setelah --separate-git-dir <git_root>, dalam hal ini direktori .git akan berada di tempat lain);
- git clone [<options>] [-] <repository> [<folder>] [-o, --origin <name>] [-b, --branch <branch>] [--single-branch] [- -tidak ada tag] [--separate-git-dir <git_root>] [-c, --config <key = value>] - Klon repositori dengan nama asal (atau yang Anda tentukan -o <nama> ), berada di cabang yang ditunjuk HEAD (atau yang Anda tentukan -b <branch>). Anda juga dapat mengkloning hanya cabang HEAD yang diperlukan (atau yang ditentukan dalam -b <branch>) dengan menentukan --single-branch. Secara default, semua tag dikloning, tetapi dengan menentukan --no-tag Anda tidak dapat mengkloningnya. Setelah perintah dieksekusi, direktori .git dibuat di direktori saat ini (atau dalam direktori yang ditentukan setelah --separate-git-dir <git_root>, dalam hal ini direktori .git akan berlokasi di tempat lain);
2.2 Status File
Untuk melihat status file di repositori Anda, gunakan:
git status [<>]
Perintah ini dapat menunjukkan kepada Anda: cabang mana Anda saat ini dan status semua file. Tidak ada opsi yang diperlukan, hanya -s yang dapat dibedakan dari yang berguna, yang akan menunjukkan gagasan singkat tentang status file.
Ajukan siklus hidup 
Seperti yang Anda lihat dalam gambar, file-file tersebut dapat dilacak dan dilacak. File yang dipantau dapat dalam 3 status: Tidak dimodifikasi (Tidak dimodifikasi), dimodifikasi (Dimodifikasi), disiapkan (Dipentaskan).
Jika Anda menambahkan (menggunakan git add) file "Tidak Dipantau", maka ia masuk ke status "Disiapkan".
Jika Anda mengubah file ke status "Tidak diubah", maka itu masuk ke status "Berubah". Jika Anda menyimpan file yang dimodifikasi (yaitu, dalam kondisi "Dimodifikasi"), ia masuk ke status "Disiapkan". Jika Anda mengkomit file (yaitu, dalam kondisi "Disiapkan"), itu masuk ke status "Tidak diubah".
Jika versi file dalam HEAD dan direktori kerja berbeda, maka file tersebut akan berada dalam status "Modifikasi", jika tidak (jika versi di HEAD dan direktori kerja adalah sama "), file tersebut akan berada dalam status" Tidak diubah ".
Jika versi file dalam HEAD berbeda dari direktori kerja, tetapi tidak berbeda dari versi dalam indeks, file akan berada dalam keadaan "Disiapkan".
Siklus ini dapat direpresentasikan sebagai berikut:
Tidak dimodifikasi -> Dimodifikasi -> Staged -> Tidak dimodifikasi
Artinya, Anda memodifikasi file, menyimpannya di indeks dan membuat komit, dan kemudian mengulangi lagi.
2.3 Bekerja dengan indeks
Saya harap Anda mengerti seperti apa siklus hidup repositori git. Sekarang mari kita lihat bagaimana Anda dapat mengelola indeks dan file di repositori git Anda.
Indeks adalah tempat perantara antara komit terakhir Anda dan komit berikutnya. Anda dapat menambah atau menghapus file dari indeks. Ketika Anda komit, itu mendapat data dari indeks, dan bukan dari ruang kerja.
Untuk melihat indeks, gunakan status git.
Untuk menambahkan file ke indeks gunakan
git add [<>]
Opsi perintah tambahkan git yang berguna:
- -f, --force - menambahkan file yang diabaikan juga
- -u, --update - perbarui file yang dilacak
Untuk menghapus file dari indeks, Anda dapat menggunakan 2 git reset dan perintah git restore.
git-restore - mengembalikan file pohon yang berfungsi.
git-reset - me-reset HEAD saat ini ke keadaan yang ditentukan.
Bahkan, Anda bisa mencapai hal yang sama dengan kedua perintah.
Untuk menghapus beberapa file dari indeks, gunakan:
git restore --staged <file>
dengan cara ini Anda akan mengembalikan indeks Anda (atau lebih tepatnya, menghapus file spesifik dari indeks), seolah-olah git add belum dieksekusi untuk mereka sejak komit terakhir. Dengan perintah ini Anda dapat mengembalikan direktori kerja sehingga seolah-olah tidak ada perubahan yang dilakukan setelah komit. Tetapi perintah ini memiliki perilaku yang agak aneh - jika Anda menambahkan versi baru file Anda ke indeks, Anda tidak dapat mengubah direktori kerja Anda sampai indeks berbeda dari HEAD. Karena itu, Anda harus terlebih dahulu mengembalikan indeks dan hanya pada direktori yang berfungsi. Sayangnya, tidak mungkin melakukan ini dengan satu perintah, karena ketika melewati kedua argumen (git restore -SW) tidak ada yang terjadi. Dan sama saja, ketika -W dilewatkan, tidak ada yang akan terjadi jika file dalam indeks dan HEAD berbeda. Mungkin, mereka melakukannya untuk perlindungan sehingga Anda tidak akan sengaja mengubah direktori kerja Anda. Tetapi dalam kasus ini, mengapa argumen -W disahkan secara default? Secara umum, saya tidak mengerti mengapa ini dilakukan dan mengapa perintah ini ditambahkan sama sekali. Bagi saya, reset copes dengan tugas ini jauh lebih baik, dan juga memiliki fungsi yang lebih kaya karena dapat memindahkan indeks dan direktori kerja tidak hanya ke komit terakhir, tetapi juga ke yang lain.
Tetapi para pengembang sendiri merekomendasikan menggunakan git restore -S untuk mengatur ulang indeks. Alih-alih git reset KEPALA.
Menggunakan status git Anda dapat melihat file mana yang telah berubah, tetapi jika Anda juga ingin tahu apa sebenarnya yang berubah dalam file, gunakan perintah:
git diff [<options>]
dengan demikian, mengeksekusi perintah tanpa argumen, Anda dapat membandingkan indeks Anda dengan direktori kerja. Jika Anda telah menambahkan file ke indeks, maka gunakan git --cached cache untuk melihat perbedaan antara komit terakhir (atau yang Anda tentukan) dan direktori kerja. Anda juga dapat melihat perbedaan antara dua commit atau branch dengan melewatkannya sebagai argumen. Contoh: git diff 00656c 3d5119 menunjukkan perbedaan antara commit 00656c dan 3d5119.
2.4 Bekerja dengan komitmen
Sekarang indeks Anda berada dalam kondisi yang tepat, sekarang saatnya untuk melakukan perubahan Anda. Ingat bahwa semua file yang tidak Anda jalankan git tambahkan setelah diedit tidak termasuk dalam komit ini. Bahkan, akan ada file di dalamnya, tetapi hanya versi lama mereka (jika ada).
Untuk melakukan perubahan Anda, gunakan:
git commit [<>]
Opsi yang berguna untuk perintah git commit:
- -F, --file [file] - Tulis pesan komit dari file yang ditentukan
- --author [penulis] - Ganti komit komit
- --tanggal [tanggal] - Ubah tanggal komit
- -m, --mesage [message] - Komit pesan
- -a, --all - Mengkomit semua perubahan pada file
- -i, --include [file ...] - Tambahkan file yang ditentukan ke indeks untuk komit berikutnya
- -o, --only [files ...] - Hanya melakukan file yang ditentukan
- --amend - Timpa komit sebelumnya
Anda dapat menentukan pesan komit default menggunakan commit.template. Arahan ini dalam file konfigurasi bertanggung jawab untuk file yang isinya akan digunakan untuk komit default. Contoh: git config --global commit.template ~ / .gitmessage.txt.
Anda juga dapat mengubah, menghapus, menggabungkan komit apa pun.
Seperti yang mungkin telah Anda perhatikan, Anda dapat dengan cepat menimpa komit terakhir dengan git commit --amend.
Untuk mengubah komit dalam cerita Anda, gunakan
git rebase -i <commit>
di mana komit adalah komit teratas dalam rantai Anda dari mana Anda ingin mengubah apa pun.
Setelah menjalankan git rebase -i di menu interaktif, pilih apa yang ingin Anda lakukan.
- pick <commit> = gunakan komit
- reword <commit> = gunakan komit, tetapi ubah pesan komit
- sunting <commit> = gunakan komit, tetapi berhentilah untuk memperbaikinya
- squash <commit> = gunakan komit, tetapi gabung dengan komit sebelumnya
- fixup <commit> = sebagai "squash", tetapi lewati pesan komit
- exec <command> = jalankan perintah (sisa baris) menggunakan shell
- break = berhenti di sini (lanjutkan dengan "git rebase --continue")
- drop <commit> = hapus komit
- label <label> = beri nama ke HEAD saat ini
- reset <label> = reset HEAD ke label yang ditentukan
Untuk mengubah pesan dari komit tertentu.Anda harus mengubah pick untuk mengedit komit yang ingin Anda ubah.
Contoh: Anda ingin mengubah pesan commit 750f5ae.
pilih 2748cb4 komit pertama
sunting 750f5ae komit kedua
pilih 716eb99 komit ketiga
Setelah menyimpan skrip, Anda akan kembali ke baris perintah dan git akan memberi tahu Anda apa yang harus dilakukan selanjutnya:
Berhenti di 750f5ae ... komit kedua
Anda dapat mengubah komit sekarang, dengan
git commit --amend
Setelah Anda puas dengan perubahan Anda, jalankan
git rebase --continue
Seperti yang ditunjukkan di atas, Anda harus menjalankan git commit - ubah untuk mengubah pesan komit. Kemudian jalankan git rebase --continue. Jika Anda telah memilih beberapa komit untuk mengubah nama, maka operasi ini perlu dilakukan pada setiap komit.
Untuk menghapus komitAnda harus menghapus baris dengan komit.
Contoh: Anda ingin menghapus commit 750f5ae
Anda perlu mengubah skrip dari ini:
pilih 2748cb4 commit ketiga
pilih 750f5ae komit kedua
pilih 716eb99 komit pertama
tentang ini:
pilih 2748cb4 komit pertama
pilih 716eb99 komit ketiga
Untuk menggabungkan komitmenAnda harus mengubah pick untuk menekan komit yang ingin Anda gabungkan.
Contoh: Anda ingin menggabungkan commit 750f5ae dan 716eb99.
Anda perlu mengubah skrip dari ini:
pilih 2748cb4 commit ketiga
pilih 750f5ae komit kedua
pilih 716eb99 komit pertama
Tentang itu
pilih 2748cb4 commit ketiga
squash 750f5ae komit kedua
squash 716eb99 komit pertama
Perhatikan bahwa dalam skrip interaktif, komit ditampilkan dalam urutan terbalik daripada di git log. Dengan menggunakan squash, Anda mengkombinasikan komit 750f5ae dengan 716eb99 dan komis 750f5ae dengan 2748cb4. Akibatnya, dapatkan satu komit yang berisi perubahan ke ketiganya.
2.5 Lihat Riwayat
Menggunakan perintah
git log [<>] [<->]
Anda dapat melihat riwayat komit dari repositori Anda. Ada juga banyak opsi untuk menyortir dan mencari komit tertentu.
Opsi perintah git log yang berguna:
- -p - Menampilkan perbedaan untuk setiap komit.
- --stat - Menampilkan statistik file yang dimodifikasi untuk setiap komit.
- --graph - Menampilkan grafik ASCII dengan cabang dan menggabungkan sejarah.
Anda juga dapat mengurutkan komit berdasarkan waktu, jumlah, dll.
- - (n) Menunjukkan hanya n terakhir yang melakukan.
- --since, --after - Menunjukkan komitmen yang dilakukan setelah tanggal yang ditentukan.
- --sampai, --before - Menunjukkan komit yang dibuat sebelum tanggal yang ditentukan.
- --author - Menunjukkan hanya yang melakukan di mana entri penulis cocok dengan string yang ditentukan.
- --committer - Menampilkan hanya komitmen di mana entri committer cocok dengan string yang ditentukan.
- --grep - Menampilkan hanya melakukan yang pesannya berisi string yang ditentukan.
- -S - Menunjukkan hanya melakukan di mana perubahan kode mengakibatkan penambahan atau penghapusan baris yang ditentukan.
Berikut ini beberapa contohnya:
git log --since = 3.weeks - Show commit dalam 2 minggu terakhir
git log --since = "2019-01-14" - Tampilkan komit yang dibuat pada 2019-01-14
git log --since = "2 tahun 1 hari yang lalu" - Tunjukkan komit yang dibuat 2 tahun dan satu hari yang lalu.
Anda juga dapat menyesuaikan format output komit Anda dengan
git log --format:["format"]
Opsi format untuk git log --format.
- % H - Hash Komit
- % h - Memendekkan hash
- % T - Pohon Hash
- % t - Hash pohon pendek
- % P - Induk Hash
- % p - Hash Induk Singkatan
- % an - Nama Penulis -% ae - Email Penulis
- % iklan - Tanggal penulis (format tanggal dapat disetel dengan opsi --date = opsi)
- % ar - Tanggal relatif penulis
- % cn - Nama Pengganti
- % ce - Email Pengirim
- % cd - Tanggal Komit
- % cr - Tanggal komitmen relatif
- % s - Konten
Contoh:
git log --pretty=format:"%h - %ar : %s"
akan menampilkan daftar commit yang terdiri dari hash waktu dan pesan commit.
2.6 Bekerja dengan repositori jarak jauh
Karena git adalah mata uang keras yang didistribusikan, Anda dapat bekerja tidak hanya dengan repositori lokal tetapi juga dengan eksternal.
Repositori jarak jauh adalah versi proyek Anda yang disimpan di server eksternal.
Untuk bekerja dengan repositori eksternal, gunakan:
git remote [<options>]
Jika Anda mengkloning repositori melalui URL http, maka Anda sudah memiliki tautan ke yang eksternal. Jika tidak, Anda dapat menambahkannya dengan
git remote add [<options>] <name> <adres>
Anda dapat segera mengekstrak cabang eksternal menggunakan -f, --fetch (Anda mendapatkan nama dan status cabang dari repositori eksternal). Anda hanya dapat mengonfigurasi repositori untuk mengirim atau menerima data menggunakan --mirror [= (push | fetch)]. Untuk mendapatkan tag, tentukan --tags.
Untuk melihat repositori eksternal yang terhubung, gunakan git remote tanpa argumen atau git remote -v untuk melihat alamat untuk mengirim dan menerima data dari repositori.
Untuk melacak cabang, gunakan git branch -u <rep / br> di mana rep adalah nama repositori, br adalah nama cabang eksternal, dan cabang adalah nama cabang lokal. Atau git branch --set-upstream local_br origin / br untuk mengindikasikan cabang lokal mana yang akan memonitor cabang eksternal.
Saat cabang Anda melacak yang eksternal, Anda bisa mengetahui cabang mana (lokal atau eksternal) di belakang atau di depan dan dengan berapa banyak yang berkomitmen. Misalnya, jika setelah komit Anda tidak melakukan git push, maka cabang Anda akan berada di depan yang luar dengan 1 komit. Anda dapat mengetahuinya dengan menjalankan git branch -vv, tetapi pertama-tama lakukan git fetch [remote-name] (--semua untuk mendapatkan pembaruan dari semua repositori) untuk mendapatkan data terbaru dari repositori eksternal. Untuk membatalkan pelacakan cabang, gunakan cabang git --unset-upstream [<local_branch>].
Untuk mengunduh data dari repositori eksternal, gunakan git pull [rep] [branch]. Jika cabang Anda melacak eksternal, maka Anda tidak dapat menentukannya saat melakukan git pull. Secara default, Anda akan menerima data dari semua cabang yang dipantau.
Untuk mengunggah cabang ke cabang baru, gunakan git checkout -b <new_branch_name> <rep / branch>.
Untuk mengirim data ke server, gunakan
git push [<rep>] [<br>]
di mana rep adalah nama repositori eksternal, dan br adalah cabang lokal yang ingin Anda kirim. Anda juga dapat menggunakan entri ini git push origin master: dev. Dengan demikian, Anda mengunggah cabang master lokal Anda ke asal (tetapi di sana akan disebut dev). Anda tidak akan dapat mengirim data ke repositori eksternal jika Anda tidak memiliki izin untuk melakukannya. Selain itu, Anda tidak akan dapat mengirim data ke cabang eksternal jika itu di depan Anda (secara umum, Anda dapat mengirim menggunakan -f, --forse dalam hal ini, Anda akan menulis ulang sejarah pada repositori eksternal). Anda dapat menghilangkan nama cabang jika cabang Anda melacak bagian luar.
Untuk menghapus cabang eksternal gunakan
git push origin --delete branch_name
Untuk informasi terperinci tentang repositori eksternal (alamat untuk mengirim dan menerima, seperti yang ditunjukkan oleh HEAD, cabang eksternal, cabang lokal yang dikonfigurasi untuk tarikan git dan tautan lokal yang dikonfigurasi untuk git push)
git remote show <remote_name>
Untuk mengganti nama repositori eksternal, gunakan
git remote rename <last_name> <new_name>
Untuk menghapus tautan ke repositori eksternal, gunakan
git remote rm <name>
3. Bercabang di git
Bercabang adalah alat yang kuat dan salah satu fitur utama git karena memungkinkan Anda untuk dengan cepat membuat dan beralih di antara berbagai cabang repositori Anda. Konsep utama percabangan adalah bahwa Anda dapat lepas landas dari jalur utama pengembangan dan terus bekerja secara independen, tanpa mengganggu jalur utama. Cabang selalu menunjuk ke komit terakhir di dalamnya, dan KEPALA menunjuk ke cabang saat ini (lihat
Pointer di git ).
3.1 Operasi dasar
Untuk membuat cabang, gunakan
git branch <branch_name> [<start_commit>]
Di sini branch_name adalah nama untuk cabang baru, dan start_commit adalah komit yang ditunjuk oleh cabang (yaitu, komit terakhir di dalamnya). Secara default, cabang akan menjadi komit terakhir dari cabang induk.
Opsi cabang Git:
- -r | -a [--merged | --no-merged] β -r. -a. --merged. --no-merged.
- -l, -f <-> [<->] β -l. , -f. < >.
- -r (-d | -D) β -r. -d. ( ) -D.
- -m | -M [< >] < > β / (-m). / , -M.
- (- | -) [<->] <-> β -c. , -C.
- -v, -vv - Daftar cabang dengan komit terakhir di cabang -v. Daftar dan status cabang yang dipantau dengan komit terakhir kepada mereka.
Lihat git branch -h untuk informasi lebih lanjut | --bantuan.Untuk beralih ke cabang, gunakan checkout git. Anda juga dapat membuat cabang dengan menjalankan git checkout -b <branch>.3.2 Menggabungkan cabang
Untuk menggabungkan 2 cabang repositori git, gunakan git merge.Opsi yang berguna untuk git merge:- --squash - Buat satu komit alih-alih penggabungan. Jika Anda memiliki konflik pada cabang, maka setelah menyelesaikannya, Anda akan menambahkan 2 komit pada cabang (komit dari cabang gabungan + komit gabungan), tetapi dengan menentukan argumen ini Anda hanya akan menambahkan satu komit (gabungan komit).
- --ff-only - Jangan bergabung jika ada konflik. Biarkan orang lain menyelesaikan konflik: D
- -X [strategi] - Gunakan strategi gabungan yang dipilih.
- --abort - Batalkan penggabungan.
Proses merger.Jika Anda tidak mengeksekusi komit baru pada cabang induk, maka gabungan tersebut bermuara ke fast-forward, seolah-olah Anda tidak membuat cabang baru, dan semua perubahan terjadi di sini (di cabang induk).Jika Anda membuat komitmen di kedua cabang, tetapi tidak membuat konflik, maka penggabungan akan terjadi di "strategi rekursif", yaitu, Anda hanya perlu membuat komitmen gabungan untuk menerapkan perubahan (gunakan opsi --sash untuk menghindari membuat komit ekstra) .Jika Anda membuat komitmen pada kedua cabang yang membuat perubahan berbeda pada bagian yang sama dari file yang sama, maka Anda harus menyelesaikan konflik dan melakukan komit gabungan.Saat menyelesaikan konflik, Anda harus memilih bagian mana dari perubahan dari dua cabang yang ingin Anda tinggalkan. Saat Anda membuka file yang bertentangan, itu akan berisi yang berikut:<<<<<<< KEPALAAkan ada versi komit terakhir dari cabang saat ini======Akan ada versi komit terakhir dari cabang gabungan>>>>>>> Di sini namanya cabang yang kami gabungkanSetelah menyelesaikan konflik, Anda harus menyelesaikan merger dengan melakukan.Selama konflik, Anda dapat melihat perbedaan apa yang ada di file mana.git diff --our - Perbedaan sebelum penggabungan dan setelahgit diff --mereka - Perbedaan cabang yang digabung sebelum penggabungan dan setelahgit beda - basis - Perbedaan dengan kedua cabang sebelum penggabungan dan setelahJika Anda tidak ingin mengizinkan penggabungan, maka gunakan berbagai strategi penggabungan, baik memilih versi "kami" (yaitu, yang terletak di cabang saat ini) atau memilih versi "mereka" yang terletak di cabang digabung tanpa memperbaiki konflik. Jalankan git merge --Xours atau git merge --Xtheirs masing-masing.3.3 Rerere
Rerere - "menggunakan kembali resolusi yang direkam" - "menggunakan kembali resolusi konflik yang disimpan". Mekanisme rerere dapat mengingat bagaimana Anda menyelesaikan bagian tertentu dari konflik di masa lalu dan secara otomatis memperbaiki konflik saat itu terjadi.Untuk mengaktifkan rerere do git config --global rerere.enabled true
Anda juga dapat mengaktifkan rerere dengan membuat direktori .git / rr-cache di repositori yang diinginkan.Gunakan status git rerere untuk melihat file rerere mana yang telah menyimpan snapshot sebelum bergabung.Gunakan git rerere diff untuk melihat kondisi konflik saat ini.Jika selama penggabungan dikatakan: Diselesaikan 'nameFile' menggunakan resolusi sebelumnya. Jadi rerere telah menyelesaikan konflik menggunakan cache.Untuk membatalkan resolusi konflik otomatis, gunakan git checkout --conflict = merge sehingga Anda membatalkan resolusi konflik otomatis dan mengembalikan file ke status konflik untuk resolusi manual.4. Pointer di git
git memiliki pointer seperti cabang HEAD. Faktanya, semuanya adalah HEAD yang sangat sederhana menunjuk ke cabang saat ini, dan cabang menunjuk ke komit terakhir di dalamnya. Tetapi untuk memahami lebih baik membayangkan bahwa KEPALA menunjukkan komitmen terakhir.4.1 Pointer Bergerak
Buku Pro git memberikan contoh yang sangat baik tentang bagaimana Anda dapat mengelola repositori Anda, jadi saya akan tetap menggunakannya. Bayangkan Git mengelola konten dari tiga pohon yang berbeda. Di sini, "pohon" mengacu pada "set file".Dalam operasinya yang biasa, Git mengelola tiga pohon:- KEPALA - Cuplikan dari komit terakhir, induk dari komit berikutnya
- Indeks - Cuplikan dari komit yang akan datang berikutnya
- Direktori Kerja - Sandbox
Sebenarnya git menyediakan alat untuk memanipulasi ketiga pohon. Selanjutnya, perintah reset git akan dibahas, yang memungkinkan Anda untuk bekerja dengan tiga pohon repositori Anda.Dengan menggunakan berbagai opsi perintah ini Anda dapat:- --soft - Atur ulang KEPALA saja
- --mixed - Reset KEPALA dan indeks
- --hard - Reset KEPALA, indeks dan direktori kerja
Dengan reset berarti pindah ke komit yang ditentukan. Standarnya adalah --mixed.Contoh 1. Anda membuat 3 komit ekstra yang masing-masing membawa perubahan kecil dan Anda ingin membuatnya, sehingga Anda dapat menggunakan git reset --soft untuk memindahkan pointer HEAD sambil membiarkan indeks dan direktori kerja tersentuh dan komit. Hasilnya, cerita Anda akan terlihat seperti semua perubahan yang terjadi dalam satu komit.Contoh 2. Anda menambahkan file ekstra ke indeks dan ingin menghapusnya dari sana. Anda dapat menggunakan git reset HEAD <file ...> untuk ini. Atau Anda ingin file komit terlihat seperti beberapa komit kembali. Seperti yang saya katakan sebelumnya, Anda dapat mengatur ulang indeks ke komit apa pun, tidak seperti git restore, yang hanya me-reset ke komit terakhir. Hanya dengan opsi campuran Anda dapat menerapkan tindakan ke file yang ditentukan!Contoh 3. Anda mulai mengerjakan fitur baru pada proyek Anda, tetapi tiba-tiba majikan mengatakan bahwa itu tidak lagi diperlukan dan Anda dalam keadaan marah melakukan git reset - Sulit mengembalikan indeks, file, dan KEPALA Anda saat Anda belum mulai mengerjakan fitur. Dan hari berikutnya Anda diberitahu bahwa fitur tersebut masih harus dicuci. Tetapi apa yang harus dilakukan? Cara bergerak maju, karena Anda memutar semua 3 pohon dan sekarang Anda tidak dapat menemukannya di riwayat menggunakan log git. Dan ada jalan keluar - ini adalah log git reflog link. Dengan perintah ini, Anda dapat melihat ke mana HEAD menunjuk dan itu akan bergerak tidak hanya ke histori komit, tetapi juga ke atas. Log ini bersifat lokal untuk setiap pengguna.Secara umum, saya pikir Anda dapat memberikan lebih banyak contoh daripada saya. Kesimpulannya, saya dapat mengatakan bahwa dengan git reset Anda dapat melakukan sihir ...5.
- Pro git β Scott Chacon
- Git β . , ,
- Git Essentials β F. Santacroce
- Git: Version Control for Everyone (2013) β R. Somasundaram
- Version Control with Git: Powerful tools and techniques for collaborative software development (2009) β J. Loeliger, M. McCullough
- Practical Git and GitHub (2016) β D. Cruz
- Git in Practice (2016) β M. McQuaid
- Git Best Practices Guide (2014) β E. Pidoux
- Learn Enough Git to Be Dangerous (2016) β M. Hartl
- Learn Version Control with Git: A step-by-step course for the complete beginner (2014) β T. GΓΌnther
- Git: Learn Version Control with Git: A step-by-step Ultimate beginners Guide (2017) β D. Hutten
- Pragmatic Guide to Git (2010) β S. Travis
- Git (2016) β .
- A Hacker's Guide to Git (2014) β J. Wynn
- Practical Git and GitHub (2016) β D. Cruz
- Deploying to OpenShift(2018) β G. Dumpleton
- Git for Teams (2015) β Emma Jane Hogbin Westby