Apa kesalahan umum Git dan bagaimana cara memperbaikinya?



Urungkan kesalahan paling umum saat membuat versi kode Anda di alat sistem pembuatan versi git dan lindungi integritas data Anda.

Dengan booming teknologi, menjadi tak terelakkan bagi setiap personel TI untuk mengerjakan banyak data secara bersamaan dan data Anda terus berkembang seiring waktu. Penting juga untuk melacak setiap perubahan dalam data dan bersiap untuk membatalkan atau mengembalikan perubahan yang tidak diinginkan bila diperlukan.

cara mengatur gerhana

Saya harus akui, dengan membuat versi data saya di Git memungkinkan saya untuk lebih eksperimental dalam pengembangan proyek saya. Jika saya mengacaukan, saya tahu git selalu memiliki cara untuk membatalkan dan / atau mengembalikan versi proyek saya ke cara sebelum saya mengacaukannya. Setiap lapisan dirancang untuk memungkinkan perubahan data ditinjau dan dimodifikasi dan / atau dikoreksi sebelum memindahkan data di tahap berikutnya. Jadi berikut adalah kesalahan yang tercakup dalam blog ini:





Pisahkan file / direktori dari Index

Saat menambahkan dan / atau memodifikasi file, Anda sering cenderung menggunakan perilaku default dari perintah 'git add', yaitu menambahkan semua file dan direktori ke Indeks.Sering kali Anda merasa perlu menghapus file tertentu atau memodifikasinya untuk terakhir kali sebelum melakukannya.



Sintaksis: git reset


menghapus file dari Indeks - kesalahan umum git -Edureka

Membatalkan pementasan file dari area Indeks memberi Anda kesempatan lain untuk mengerjakan kembali data Anda sebelum berkomitmen ke repo lokal.



Edit pesan terakhir yang dilakukan

Perintah: git commit --amend
Anda dapat mengedit pesan komit terbaru tanpa membuat yang baru. Untuk mencantumkan log komit, saya telah menyetel alias 'hist':
Perintah: git config --global alias.hist 'log --pretty = format: '% C (kuning)% h% Creset% ad | % C (hijau)% s% Creset% C (merah)% d% Creset% C (biru) [% an] '--graph --decorate --date = short'x


Jangan mengubah pesan komit yang sudah didorong ke repositori jarak jauh dan dibagikan dengan orang lain, karena itu akan membuat riwayat komit sebelumnya tidak valid dan dengan demikian pekerjaan apa pun berdasarkan itu mungkin terpengaruh.

Lupa beberapa perubahan di komit terakhir

Misalkan Anda lupa melakukan beberapa modifikasi dan sudah melakukan snapshot Anda, juga Anda tidak ingin membuat komitmen lain untuk menyoroti kesalahan Anda.
Perintah: git commit --amend


Saya telah menyoroti bagaimana id sha-1 objek commit baru-baru ini telah dibuat ulang dan diubah. Saya berpura-pura telah membuat satu komitmen yang memadukan kedua perubahan menjadi satu.

Buang perubahan lokal

Jadi, ini adalah kasus di mana saya memodifikasi file 'README' dan mengaturnya. Selanjutnya, saya memodifikasi file yang sama untuk kedua kalinya tetapi menyadari bahwa saya tidak menginginkan perubahan kedua.

Sekarang, izinkan saya tidak membatalkan seluruh perubahan secara manual, saya cukup menarik versi bertahap dari file tersebut.
Sintaksis:
git checkout -–Perubahan lokal dalam file
git checkout -–Perubahan lokal di semua file dalam direktori & malu & malu

Perintah: git checkout - README

Jadi, saya membuang perubahan terakhir saya pada file dan menerima versi bertahap dari file tersebut. Di komit berikutnya, hanya versi bertahap dari file yang masuk ke repositori lokal.

Data pribadi yang terikat ke repositori lokal

Saya ingin menghapus data tertentu dari repositori lokal tetapi menyimpan file di direktori kerja.
Sintaksis:
git reset - HEAD tercampur ~
git reset --mixed

Perintah: git reset - HEAD tercampur ~ 1
HEAD ~ 1 menunjukkan komit tepat sebelum komit terbaru yang ditunjukkan oleh HEAD cabang saat ini.

File dalam snapshot saat ini dihapus dari repositori lokal dan area pementasan. Tambahkan pola berikut di file .gitignore global untuk mengecualikannya agar tidak dilacak oleh git.
vim ~ / .gitignore_global
# file kata sandi #
*.lulus
*.kunci
* .passwd

Dengan ini, komit yang memiliki snapshot file kata sandi dihapus, dan Anda mendapatkan area pementasan yang bersih. File saya masih ada di direktori kerja saya tetapi tidak lagi ada di repositori lokal, juga tidak akan didorong pada repositori jarak jauh.

Peringatan: Jika Anda kehilangannya, git tidak dapat memulihkannya untuk Anda karena tidak mengetahuinya.

Ganti komit terbaru dengan komit baru

Sintaksis: git reset --soft [/ HEAD ~ n>]

Opsi '–soft' hanya menghapus file yang dikomit dari repositori lokal saat mereka masih dalam tahap dalam Indeks dan Anda dapat memasukkannya kembali setelah ditinjau. adalah sha-1 dari snapshot yang ingin Anda hapus dari repo lokal. di mana n adalah jumlah komit sebelum HEAD komit

Perintah :git reset --soft HEAD ~ 1


Ubah file dan atur lagi

Perintah: git commit -m 'Menambahkan index.html dan style.css'
Riwayat komit Anda sekarang ternyata:

Melakukan data yang salah

Sintaksis:
git reset --hard HEAD ~ n–Menyetel ulang proyek menjadi 'n' komit sebelum snapshot berkomitmen terbaru
git reset --hard–Menyetel ulang proyek menjadi snapshot commit id yang diberikan

Perintah: git reset --hard HEAD ~ 1


Komit terbaru dan file yang rusak dihapus dari repositori lokal, area pementasan serta direktori kerja.

Peringatan: Ini adalah perintah yang berbahaya karena Anda akhirnya kehilangan file di direktori kerja. Tidak direkomendasikan pada repositori bersama dari jarak jauh.

Kembali ke status proyek lama saya

Anda dapat beralih ke status proyek Anda yang lebih lama dalam sejarah waktu. Jika Anda mengacaukan versi terbaru atau memerlukan peningkatan dalam kode lama, Anda mungkin ingin membuat cabang lain dari snapshot proyek lama agar tidak menghalangi pekerjaan Anda saat ini. Mari kita lihat caranya:
Sebuah. Buat daftar riwayat proyek dan putuskan id komit yang lebih lama, perintah:pergi hist
b. Buat cabang lain dari id komit:git checkout -b e7aa9a5 status lama
c. Lanjutkan mengerjakan kode dan kemudian gabungkan / rebase dengan cabang 'master'.

Pulihkan cabang lokal yang dihapus

Dimungkinkan untuk meregenerasi pekerjaan yang hilang pada cabang referensi. Katakanlah, saya menghapus cabang 'old_code' tanpa menggabungkan dengan cabang utama dan kehilangan pekerjaan. Dan tidak, saya juga tidak mendorong cabang ke repositori jarak jauh, lalu bagaimana? Well git melacak dan menyimpan entri jurnal dari semua perubahan yang dilakukan pada setiap referensi, mari kita lihat milik saya:pergi reflog

Jadi, HEAD @ {2} adalah penunjuk ketika saya pindah ke cabang 'old_code', mari kita pulihkan bahwa:

Sintaksis:git checkout -b
Perintah:git checkout -b old_code HEAD @ {2}

Anda sekarang harus berada di cabang 'old_code' dengan pekerjaan terbaru Anda pada saat pembuatannya. Selain itu, penunjuk 'reflog' di HEAD @ {1} adalah komit terbaru yang dibuat pada cabang 'old_code'. Untuk memulihkan keunikan ini komit jalankan saja perintah sebagai:git reset --hard HEAD @ {1}.Ini juga mengembalikan file yang dimodifikasi di direktori kerja.

Jika Anda ingin mengetahui secara detail bagaimana perintah ini bekerja dan bagaimana Anda dapat mengelola entri 'reflog', Anda juga dapat membaca posting saya sebelumnya dimemulihkan cabang yang dihapus dari git reflog.

Urungkan perubahan yang dilakukan dalam komit

Pergilahkembalidigunakan untuk merekam beberapa komit baru untuk membalikkan efek dari beberapa komit sebelumnya.
Sintaksis: git kembali
Dari log komit saya, saya ingin membalikkan perubahan yang dilakukan di id komit yang disorot:

Perintah: git revert 827bc0d

Lebih baik, Anda tidak menyetel ulang '–hard' pada komit yang dibagikan, tetapi 'git mengembalikannya' untuk menyimpan riwayat sehingga menjadi lebih mudah bagi semua untuk melacak log riwayat untuk mencari tahu apa yang dikembalikan, oleh siapa dan mengapa?

Anda dapat menggunakan logika yang sama untuk merujuk komit terkait penunjuk HEAD alih-alih memberikan id komit, seperti dalam HEAD ~ 3 atau HEAD ~ 4 dan seterusnya.

Memberi nama yang salah ke cabang saya

Anda dapat mengganti nama cabang lokal. Ini terjadi berkali-kali sehingga Anda mungkin ingin mengganti nama cabang Anda berdasarkan masalah yang sedang Anda tangani tanpa harus bersusah payah memindahkan semua pekerjaan Anda dari satu lokasi ke lokasi lain. Misalnya, Anda bisa saja berada di cabang yang sama atau cabang yang berbeda dan masih bisa mengganti nama cabang yang diinginkan seperti yang ditunjukkan di bawah ini:
Sintaksis: git branch -m
Perintah: git branch -m old_code old_ # 4920

Mungkin Anda bertanya-tanya apakah git terus melacak penggantian nama ini? Ya, ini merujuk ke entri 'reflog' Anda, ini milik saya:

Mengganti nama cabang tidak akan mempengaruhi cabang pelacak jarak jauhnya. Kita akan melihat di bagian jarak jauh cara mengganti cabang pada repositori jarak jauh

Atur ulang log riwayat sebelum mendorong ke jarak jauh

Betapa saya berharap saya akan membuat komitmen tertentu lebih awal dari yang lain dan tidak akan membuat beberapa komitmen sama sekali. Atur ulang secara interaktif dan edit komitmen lama untuk memperbaiki atau meningkatkan kode secara efektif
Sintaksis: git rebase -i
Perintah: git rebase -i fb0a90e–Mulai rebasing komit yang dibuat setelah commit-id fb0a90e

Kunjungi kembali git rebase dokumentasi untuk memahami bagaimana rebase '-interaktif atau -i' berbeda dari rebase biasa.

Perubahan yang tidak terkait berkomitmen menjadi satu komit

Dalam kasus ini, Anda perlu membagi komit terkubur lama menjadi beberapa komit logis.
Sintaksis: git rebase -i
Perintah: git rebase -i fb0a90e
Di editor rebase, Anda harus memilih e7aa9a5 commit id dan mengubahnya menjadi 'edit' daripada 'pick'.

perubahan yang tidak terkait - kesalahan git umum -Edureka

Anda sekarang akan berada dalam versi commit id-e7aa9a5 dari proyek. Pertama, setel ulang riwayat komit dan area pementasan ke Komitmen-komit sebelumnya:git reset HEAD ~ 1
Kedua, edit + tahap + komit file satu per satu
Perintah:
git tambahkan kode && git commit -m 'Menambahkan kode awal'
git tambahkan kode baru && git commit -m 'Menambahkan kode baru'

Ketiga, lanjutkan rebase dan end.

Perintah :git rebase - lanjutkan
Keempat, lihat histori dengan komitmen tambahan.

Perintah: pergi hist

membelah komit menjadi beberapa menggunakan rebase - kesalahan umum yang umum - Edureka

Ubah email penulis di semua komit di semua cabang

Saya telah membuat versi dan mengkomit file proyek saya di git sejak lama, tetapi sampai sekarang tidak pernah terpikir oleh saya bahwa id email saya dikompromikan dalam log riwayat komit saya yang bahkan diterbitkan pada repositori jarak jauh. Ini mungkin terjadi pada siapa saja saat Anda pertama kali menyiapkan konfigurasi di file '.gitconfig'. Saya lega git bisa menulis kembali variabel lingkungan yang kami sediakan saat membuat objek komit.

Pertama saya mendapatkan daftar id email untuk memutuskan yang ingin saya ubah:
Perintah: git log --all --pretty = format: '% an% d'–Ini mencetak nama-penulis (refname / nama-cabang)

Kedua, saya lari setiap komit di setiap cabang dan tulis ulang objek komit dengan id email baru
Perintah:
git filter-branch --env-filter '
jika ['$ GIT_AUTHOR_NAME' = 'divya']
kemudian
GIT_AUTHOR_EMAIL = 'divya@github.com'
menjadi
'- --semua

File hilang dan ditemukan

Misalkan Anda kehilangan file tertentu dan Anda tidak ingat namanya, tetapi dapat mengingat kata-kata tertentu di file tersebut. Dalam hal ini, Anda dapat mengikuti langkah-langkah ini-
Langkah 1: Buat daftar semua komit yang pernah berisi snapshot file dengan pola yang dicari
Perintah :git rev-list --all | xargs git grep -i 'timestamp'



Langkah 2 : Buat cabang baru 'hilang-ditemukan' dari commit-id yang disorot ini
Sintaksis: git checkout -b hilang ditemukan d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Lupa cabang mana yang memiliki commit-id saya

Kadang-kadang, setelah Anda mendeteksi ID komit yang bermasalah, Anda mungkin juga ingin mengetahui semua cabang yang memiliki komit ini sehingga Anda dapat memperbaiki semuanya. Memeriksa riwayat setiap cabang tidak terlalu praktis dalam proyek multi-cabang yang besar.

Komitmen buruk yang dibuat dalam aplikasi gedung navigasi saya pernah memecahkan kode, saat itulah saya menggunakan 'Git bisect' untuk mendeteksi ID komit yang buruk diikuti olehperintah:git branch --berisiuntuk membuat daftar cabang dengan komit buruk itu.

Jadi, sekarang saya tahu semua cabang yang masih memiliki komit buruk, saya bisa mengembalikan atau mengatur ulang set perubahan ini.

Hapus komit dari riwayat

Kadang-kadang saya merasa perlu untuk menghapus komit dari sejarah dan tidak meninggalkan jejaknya. Saya tidak akan merekomendasikan Anda untuk mencoba aksi ini di cabang bersama tetapi hanya di cabang lokal Anda.
Sintaksis: git rebase -i
Perintah :git rebase -i 93859d8
Di editor rebase-> ganti ‘edit’ dengan ‘drop’ untuk commit id yang disorot: 69f4813

Dalam beberapa kasus, penulisan ulang ini dapat mengakibatkan konflik. Anda harus menyelesaikan konflik lalu melanjutkan lebih jauh.

Peringatan : Ini adalah perintah berbahaya karena ini menulis ulang riwayat dan dapat kehilangan data. Cabang seperti itu berbeda dari mitra jarak jauhnya dan harus didorong dengan--memaksaatau- force-with-leasepilihan.

Mendorong cabang yang salah ke remote

Sekarang, inilah yang ingin saya lakukan- Saya ingin menghapus file cabang jarak jauh dan juga berhenti melacaknya dari cabang lokal saya. 'git push'Perintah saat digunakan dengan--menghapusopsi menghapus cabang jarak jauh Jadi, ini adalah cara saya mendapatkan salinan lokal dari proyek kloning -

git clone https://github.com/greets/myProj.git
cd myProj


Sekali, cabang jarak jauh dihapus, orang lain di repo bersama harus menyegarkan dan memperbarui referensi jarak jauh mereka dengan--memangkasopsi untuk menghapus referensi objek yang hilang:git fetch --prune -v origin

Dalam posting ini, saya telah menyebutkan beberapa kesalahan atau perubahan umum yang dapat dibantu oleh git untuk Anda perbaiki. Setiap kode itu unik dan dikembangkan dengan caranya sendiri, jadi ada juga cara berbeda untuk mendekati dan memperbaiki masalah. Anda selalu bisa merujuk ke pejabat tersebut dokumentasi git untuk memahami bagaimana berbagai perintah git melindungi kode sumber Anda dan cara memanfaatkan perintah dengan cara terbaik.

Sekarang setelah Anda memahami kesalahan umum Git, lihat ini oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus Pelatihan Sertifikasi DevOps Edureka membantu peserta didik untuk memahami apa itu DevOps dan mendapatkan keahlian dalam berbagai proses dan alat DevOps seperti Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack, dan GIT untuk mengotomatiskan berbagai langkah di SDLC.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar 'kesalahan umum Git' dan kami akan menghubungi Anda kembali