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
- Edit mesej terakhir yang dilakukan
- Lupa beberapa perubahan pada komit terakhir
- Buang perubahan tempatan
- Menyampaikan data peribadi ke repositori tempatan
- Menggantikan komit terbaru dengan komit baru
- Melakukan data yang salah
- Kembali ke keadaan projek lama saya
- Pulihkan cawangan tempatan yang dipadamkan
- Buat asal perubahan yang dilakukan dalam komit
- Memberi nama yang salah pada cawangan saya
- Ingin menyusun semula log sejarah sebelum mendorong ke jauh
- Melakukan perubahan yang tidak berkaitan menjadi satu komit
- Tukar e-mel pengarang dalam semua komitmen di semua cawangan
- Fail yang hilang dan dijumpai
- Terlupa cawangan mana yang mempunyai komitmen-id saya
- Padamkan komit dari sejarah
- Menolak cabang yang salah ke alat kawalan jauh
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
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'.
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
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 - mengandungi
untuk 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- kekuatan
atau- paksa dengan sewa
pilihan.
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- padam
pilihan 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--jimat
pilihan 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