Apakah kesalahan Git biasa dan bagaimana memperbaikinya?



Batalkan kesilapan yang paling biasa semasa membuat kod anda dalam alat sistem versi git dan lindungi integriti data anda.

Dengan ledakan teknologi, menjadi tidak dapat dielakkan bagi mana-mana orang IT untuk menggunakan banyak data secara serentak dan data anda sentiasa berubah mengikut masa. Juga penting untuk melacak setiap perubahan dalam data dan bersiaplah untuk membatalkan atau mengembalikan perubahan yang tidak diinginkan apabila diperlukan.

Saya mesti mengaku, versi data saya di Git membolehkan saya lebih eksperimen dalam pembangunan projek saya. Sekiranya saya mengacaukan, saya tahu git selalu mempunyai cara untuk membatalkan dan / atau mengembalikan versi projek saya seperti sebelumnya sebelum saya mengacaukannya. Masing-masing lapisan dirancang untuk membolehkan perubahan data ditinjau dan diubah dan / atau diperbetulkan sebelum memindahkan data pada tahap berikutnya. Oleh itu, berikut adalah kesilapan yang diliputi dalam blog ini:





Fail / direktori tanpa peringkat dari Indeks

Semasa menambah dan / atau mengubah fail, anda sering cenderung menggunakan tingkah laku lalai perintah 'git add', iaitu menambahkan semua fail dan direktori ke Indeks.Sering kali anda merasakan perlunya membongkar fail tertentu atau mengubahnya sekali terakhir sebelum menyusunnya.



Sintaks: tetapkan semula git


keluarkan fail dari Indeks - kesalahan git biasa -Edureka

Membongkar fail dari kawasan Indeks memberi anda peluang lain untuk mengerjakan kembali data anda sebelum melakukan repo tempatan.



overloading vs overriding c ++

Edit mesej terakhir yang dilakukan

Perintah: git komit --ubah
Anda boleh mengedit mesej komit terkini tanpa membuat yang baru. Untuk menyenaraikan log komit, saya telah menetapkan alias ‘hist’:
Perintah: git config --global alias.hist 'log --pretty = format: '% C (kuning)% h% Creset% iklan | % C (hijau)% s% Creset% C (merah)% d% Creset% C (biru) [% an] '--graph --decorate --date = short'x


Jangan ubah mesej komit yang sudah didorong ke repositori jauh dan dikongsi dengan orang lain, kerana itu akan menjadikan sejarah komitmen terdahulu tidak sah dan oleh itu sebarang kerja berdasarkannya mungkin akan terjejas.

Lupa beberapa perubahan pada komit terakhir

Katakan anda terlupa membuat beberapa pengubahsuaian dan sudah membuat tangkapan gambar anda, juga anda tidak mahu membuat komitmen lain untuk menonjolkan kesilapan anda.
Perintah: git komit --ubah


Saya telah mengetengahkan bagaimana id sha-1 objek komit baru-baru ini dibuat dan diubah. Saya berpura-pura membuat satu komit yang menggabungkan kedua-dua perubahan menjadi satu.

Buang perubahan tempatan

Jadi, berikut adalah kes di mana saya mengubah suai fail 'README' dan memasangnya. Seterusnya, saya mengubah suai fail yang sama buat kali kedua tetapi menyedari bahawa saya tidak mahu perubahan kedua.

Sekarang, biarkan saya tidak mengurungkan keseluruhan perubahan secara manual, saya hanya boleh menarik versi fail berperingkat.
Sintaks:
git checkout -- Perubahan tempatan dalam fail
git checkout -- Perubahan tempatan dalam semua fail dalam direktori & malu & segan

Perintah: git checkout - BACA

Oleh itu, saya membuang perubahan terakhir pada fail dan menerima versi fail bertahap. Pada komit seterusnya, hanya versi versi berperingkat yang terdapat di repositori tempatan.

Menyampaikan data peribadi ke repositori tempatan

Saya ingin membuang data tertentu dari repositori tempatan tetapi menyimpan fail dalam direktori yang berfungsi.
Sintaks:
git reset - HEAD bercampur ~
git reset - dicampurkan

Perintah: git reset - HEAD bercampur ~ 1
KEPALA ~ 1 menunjukkan komit tepat sebelum komit baru-baru ini ditunjukkan oleh KETUA cawangan semasa.

Fail dalam snapshot semasa dikeluarkan dari repositori tempatan dan kawasan pementasan. Tambahkan corak berikut dalam fail .gitignore global untuk mengecualikannya daripada dijejaki oleh git.
vim ~ / .gitignore_global
# fail kata laluan #
*. lulus
* .kunci
* .passwd

Dengan ini, komit yang mempunyai snapshot fail kata laluan dikeluarkan, dan anda mendapat kawasan pementasan yang bersih. Fail saya masih ada di direktori kerja saya tetapi tidak lagi ada di repositori tempatan, juga tidak akan didorong di repositori jauh.

Awas: Sekiranya anda kehilangannya, git tidak dapat memulihkannya untuk anda kerana ia tidak tahu mengenainya.

Gantikan komit terkini dengan komit baru

Sintaks: tetapkan semula git --soft [/ HEAD ~ n>]

Pilihan ‘–soft’ hanya membuang fail yang berkomitmen dari repositori tempatan semasa fail tersebut masih dipentaskan di Indeks dan anda boleh melakukannya semula setelah disemak. adalah sha-1 dari snapshot yang ingin anda alih keluar dari repo tempatan. di mana n adalah bilangan komit sebelum HEAD melakukan

Perintah :git reset --KEPALA lembut ~ 1


Ubah suai fail dan tingkatkan lagi

Perintah: git commit -m 'Menambah index.html dan style.css'
Sejarah komitmen anda kini berubah menjadi:

Melakukan data yang salah

Sintaks:
git reset --hard HEAD ~ n–Menetapkan semula projek kepada komitmen ‘n’ sebelum snapshot terbaru yang dilakukan
tetapkan semula git --hard- tetapkan semula projek untuk mendapatkan snapshot komit id

Perintah: tetapkan semula git --hard HEAD ~ 1


Komit terbaru dan fail yang rosak dikeluarkan dari repositori tempatan, kawasan pementasan dan juga direktori kerja.

Awas: Ini adalah arahan yang berbahaya kerana anda akhirnya kehilangan fail di direktori yang berfungsi. Tidak disyorkan di repositori bersama yang dikendalikan dari jauh.

Kembali ke keadaan projek lama saya

Anda boleh memanfaatkan keadaan projek anda yang lebih lama dalam sejarah masa. Sekiranya anda mengacaukan versi terbaru atau memerlukan penambahbaikan dalam kod lama, anda mungkin mahu membuat cawangan lain daripada snapshot projek lama itu agar tidak menghalang pekerjaan anda sekarang. Mari lihat bagaimana:
a. Senaraikan sejarah projek dan tentukan id komit yang lebih lama, perintah:pergi hist
b. Buat cabang lain dari id komit:git checkout -b lama-negeri e7aa9a5
c. Terus buat kod dan kemudian gabungkan / rebase dengan cawangan ‘master’.

Pulihkan cawangan tempatan yang dipadamkan

Adalah mungkin untuk menghasilkan semula karya yang hilang di cabang rujukan. Katakanlah, saya memadamkan cawangan ‘old_code’ tanpa bergabung dengan cawangan utama dan kehilangan kerja. Dan tidak, saya tidak mendorong cawangan ke repositori jauh, lalu bagaimana? Baiklah, jejak dan buat catatan jurnal mengenai semua perubahan yang dilakukan pada setiap rujukan, mari kita lihat:pergi reflog

Oleh itu, KEPALA @ {2} adalah petunjuk ketika saya berpindah ke cawangan 'old_code', mari kita pulihkan bahawa:

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

Anda mesti sekarang berada di cawangan 'old_code' dengan karya terbaru anda semasa penciptaannya. Di samping itu, penunjuk 'reflog' di HEAD @ {1} adalah komitmen baru-baru ini yang dibuat di cawangan 'old_code'. Untuk mengembalikan yang unik komit jalankan perintah seperti:git reset --hard HEAD @ {1}.Ini juga mengembalikan fail yang diubah suai dalam direktori yang berfungsi.

Sekiranya anda ingin mengetahui secara terperinci bagaimana arahan ini berfungsi dan bagaimana anda dapat menguruskan entri ‘reflog’, anda juga boleh membaca catatan saya yang terdahulu dimemulihkan cawangan yang dipadam dari git reflog.

Buat asal perubahan yang dilakukan dalam komit

pergimembalikkandigunakan untuk merakam beberapa komit baru untuk membalikkan kesan beberapa komit sebelumnya.
Sintaks: git membalikkan
Dari log komit saya, saya ingin membalikkan perubahan yang dilakukan dalam id komitmen yang diserlahkan:

Perintah: git membalikkan 827bc0d

Lebih baik anda tidak menetapkan semula '-hard' yang dikongsi bersama, tetapi 'git revert' mereka untuk menyimpan sejarah sehingga menjadi lebih mudah bagi semua orang untuk melacak log sejarah untuk mengetahui apa yang dikembalikan, oleh siapa dan mengapa?

Anda boleh menggunakan logik yang sama dengan merujuk komit mengenai penunjuk KEPALA dan bukannya memberikan id komit, seperti di KEPALA ~ 3 atau KEPALA ~ 4 dan seterusnya.

Memberi nama yang salah pada cawangan saya

Anda boleh menamakan semula nama cawangan tempatan. Perkara itu berlaku berkali-kali sehingga anda mungkin mahu menamakan semula cawangan anda berdasarkan masalah yang anda jalani tanpa perlu melalui keperitan memindahkan semua pekerjaan anda dari satu lokasi ke lokasi lain. Sebagai contoh, anda mungkin berada di cawangan yang sama atau cabang yang berbeza dan masih dapat menamakan semula cawangan yang diinginkan seperti yang ditunjukkan di bawah:
Sintaks: cawangan git -m
Perintah: cawangan git -m old_code old_ # 4920

Seperti yang anda tertanya-tanya adakah git mengikuti jejak nama ini? Ya, ini merujuk kepada entri ‘reflog’ anda, berikut adalah catatan saya:

Menamakan semula cawangan tidak akan mempengaruhi cawangan pengesanan jarak jauh. Kita akan melihat di bahagian jauh cara mengganti cawangan di repositori jauh

Susun semula log sejarah sebelum mendorong ke jauh

Betapa saya berharap saya dapat membuat komitmen tertentu lebih awal daripada yang lain dan sama sekali tidak akan membuat beberapa komitmen. Susun semula dan edit komited lama secara interaktif untuk memperbaiki atau meningkatkan kod secara berkesan
Sintaks: git rebase -i
Perintah: git rebase -i fb0a90e- mulakan penurunan semula komit yang dibuat setelah komitmen-id fb0a90e

Lawati semula git rebase dokumentasi untuk memahami bagaimana perbezaan '-interaktif atau -i' berbeza daripada rebase biasa.

Melakukan perubahan yang tidak berkaitan menjadi satu komit

Dalam kes ini, anda perlu memisahkan komit lama yang telah dikuburkan menjadi beberapa komit logik.
Sintaks: git rebase -i
Perintah: git rebase -i fb0a90e
Dalam editor rebase, anda mesti memilih id komitmen e7aa9a5 dan menukarnya menjadi 'edit' dan bukannya 'pilih'.

perubahan yang tidak berkaitan - kesilapan git biasa -Edureka

Anda sekarang akan berada dalam versi projek komit id-e7aa9a5. Pertama, tetapkan semula sejarah komit dan kawasan pementasan ke komit-komando sebelumnya:git reset KEPALA ~ 1
Kedua, edit + tahap + buat fail secara berasingan
Perintah:
git add code && git commit -m 'Menambah kod awal'
git tambah kod baru & & git komit -m 'Menambah kod baru'

Ketiga, teruskan rebase dan berakhir.

Perintah :git rebase - teruskan
Keempat, lihat sejarah dengan komitmen tambahan.

Perintah: pergi hist

membelah komit menjadi beberapa menggunakan rebase - kesalahan git biasa - Edureka

Tukar e-mel pengarang dalam semua komitmen di semua cawangan

Saya telah membuat versi dan membuat fail projek saya dalam git sejak dulu lagi, tetapi sehingga sekarang tidak pernah terfikir bahawa id e-mel saya terganggu dalam log sejarah komit saya yang bahkan diterbitkan di repositori terpencil. Nah, ini mungkin berlaku kepada sesiapa sahaja ketika anda mula-mula menyiapkan konfigurasi dalam fail '.gitconfig'. Untuk bantuan saya boleh menulis semula pemboleh ubah persekitaran yang kami sediakan semasa membuat objek komit.

Pertama saya mendapat senarai id e-mel untuk memutuskan yang saya mahu ubah:
Perintah: git log --all --pretty = format: '% an% d'–Ini mencetak nama pengarang (nama semula / nama cawangan)

Kedua, saya melalui setiap komitmen di setiap cabang dan tulis semula objek komit dengan id e-mel baru
Perintah:
git filter-cawangan --env-filter '
jika ['$ GIT_AUTHOR_NAME' = 'divya']
kemudian
GIT_AUTHOR_EMAIL = 'divya@github.com'
menjadi
' -- --semua

Fail yang hilang dan dijumpai

Katakan anda telah kehilangan fail tertentu dan anda tidak ingat namanya, tetapi dapat mengingat perkataan tertentu dalam fail tersebut. Dalam kes ini, anda boleh mengikuti langkah-
Langkah 1: Senaraikan semua komit yang pernah mengandungi snapshot fail dengan corak yang dicari
Perintah :git rev-list --semua | xargs git grep -i 'cap waktu'



Langkah 2 : Buat cawangan baru 'hilang-ditemukan' dari comm-id yang diserlahkan ini
Sintaks: git checkout -b hilang dijumpai d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Terlupa cawangan mana yang mempunyai komitmen-id saya

Kadang kala, setelah anda mengesan id komitmen buggy, anda mungkin juga ingin mengetahui semua cabang yang mempunyai komitmen ini agar anda dapat memperbaikinya. Memeriksa sejarah setiap cawangan tidak begitu praktikal dalam projek pelbagai cawangan yang besar.

Komitmen buruk yang dibuat dalam aplikasi bangunan navigasi saya pernah melanggar kodnya, ketika itulah saya menggunakan Perintah ‘git bisect’ untuk mengesan komit id yang tidak baik diikuti oleharahan:cawangan git - mengandungiuntuk menyenaraikan cabang dengan komitmen buruk itu.

Jadi, sekarang saya tahu semua cabang yang masih mempunyai komitmen buruk, saya boleh mengembalikan atau menetapkan semula perubahan ini.

Padamkan komit dari sejarah

Kadang-kadang saya merasakan keperluan untuk menghapuskan komitmen dari sejarah dan tidak meninggalkan jejaknya. Saya tidak mengesyorkan anda mencuba aksi ini di cawangan bersama tetapi hanya di cawangan tempatan anda.
Sintaks: git rebase -i
Perintah :git rebase -i 93859d8
Dalam editor rebase-> ganti 'edit' dengan 'drop' untuk id komitmen yang disorot: 69f4813

Dalam beberapa kes, penulisan semula ini boleh mengakibatkan konflik. Anda mesti menyelesaikan konflik dan teruskan lebih jauh.

Amaran : Ini adalah arahan yang berbahaya kerana ini menulis semula sejarah dan mungkin kehilangan data. Cabang seperti itu berbeza dari rakan jauh dan perlu ditolak dengan- kekuatanatau- paksa dengan sewapilihan.

Menolak cabang yang salah ke alat kawalan jauh

Sekarang, inilah yang ingin saya lakukan- Saya mahu memadamkan a cawangan terpencil dan juga berhenti mengesannya dari cawangan tempatan saya. 'tolak git'Perintah apabila digunakan dengan- padampilihan menghapus cawangan terpencil Jadi, ini adalah bagaimana saya mendapatkan salinan tempatan dari projek yang diklon -

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


Sekali, cawangan jauh dihapus yang lain di repo bersama mesti memuat semula dan mengemas kini rujukan jarak jauh mereka dengan--jimatpilihan untuk menghapus rujukan objek yang hilang:git fetch --prune -v origin

Dalam catatan ini, saya telah menyebut beberapa kesalahan atau perubahan biasa yang dapat membantu anda perbaiki. Setiap kod unik dan dikembangkan mengikut cara, jadi ada juga cara yang berbeza untuk mendekati dan menyelesaikan masalah. Anda selalu boleh merujuk kepada pegawai dokumentasi git untuk memahami bagaimana pelbagai perintah git melindungi kod sumber anda dan bagaimana menggunakan perintah dengan cara terbaik.

Sekarang setelah anda memahami kesalahan Git biasa, lihat ini oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia. Kursus Latihan Persijilan Edureka DevOps membantu pelajar memahami apa itu DevOps dan memperoleh kepakaran dalam pelbagai proses dan alat DevOps seperti Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack dan GIT untuk mengautomasikan beberapa langkah dalam SDLC.

Ada soalan untuk kami? Sila sebutkan di bahagian komen dari 'Kesalahan Git biasa' ini dan kami akan menghubungi anda