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
- Edit pesan terakhir yang dilakukan
- Lupa beberapa perubahan di komit terakhir
- Buang perubahan lokal
- Data pribadi yang terikat ke repositori lokal
- Mengganti komit terbaru dengan komit baru
- Melakukan data yang salah
- Kembali ke status proyek lama saya
- Pulihkan cabang lokal yang dihapus
- Urungkan perubahan yang dilakukan dalam komit
- Memberi nama yang salah ke cabang saya
- Ingin mengatur ulang log riwayat sebelum mendorong ke jarak jauh
- Perubahan yang tidak terkait berkomitmen menjadi satu komit
- Ubah email penulis di semua komit di semua cabang
- File hilang dan ditemukan
- Lupa cabang mana yang memiliki commit-id saya
- Hapus komit dari riwayat
- Mendorong cabang yang salah ke remote
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
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'.
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
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 --berisi
untuk 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--memaksa
atau- force-with-lease
pilihan.
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--menghapus
opsi 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--memangkas
opsi 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