Rumah > Peranti teknologi > industri IT > 5 cara untuk membatalkan kesilapan dengan git

5 cara untuk membatalkan kesilapan dengan git

Joseph Gordon-Levitt
Lepaskan: 2025-02-10 12:19:08
asal
780 orang telah melayarinya

5 Ways to Undo Mistakes with Git

Pembangunan perisian, tidak kira betapa berpengalamannya, tidak dapat dielakkan untuk membuat kesilapan. Tetapi perbezaan antara pengaturcara yang baik dan pengaturcara biasa adalah bahawa mereka tahu bagaimana untuk

membatalkan ralat!

Jika anda menggunakan Git sebagai sistem kawalan versi anda, anda sudah mempunyai set "alat undo" yang kuat. Artikel ini akan menunjukkan kepada anda lima cara yang kuat untuk membatalkan kesilapan dengan Git!

mata utama

    Git membolehkan pengguna membatalkan kesilapan dalam kod dengan membuang perubahan tempatan yang tidak diingini. Ini boleh dilakukan dengan menggunakan arahan
  • , yang menetapkan semula fail ke keadaan yang terakhir. Untuk lebih banyak kawalan berbutir, anda boleh menggunakan bendera git restore untuk membuang perubahan pada tahap patch. -p Perintah
  • boleh digunakan untuk memulihkan fail tertentu ke versi tertentu. Pengguna boleh mengenal pasti "ralat komit" fail yang korup dan kemudian gunakan arahan git log untuk memulihkan fail ke versi sebelum komit yang salah. git checkout
  • Alat Git boleh digunakan untuk memulihkan versi yang hilang atau cawangan yang dipadam.
  • Pergerakan rekod semua petunjuk kepala di repositori tempatan, yang membolehkan pengguna kembali ke keadaan sebelumnya dan memulihkan data yang hilang. Reflog Reflog Pengguna boleh menggunakan arahan
  • untuk memindahkan komit ke cawangan yang berbeza. Sekiranya komit itu untuk cawangan yang salah, pengguna boleh menyemak cawangan yang betul, gerakkan komit lalu, dan kemudian gunakan
  • untuk memadamkan komit yang tidak diingini dari cawangan asal. git cherry-pick git reset
  • membuang beberapa perubahan tempatan

Proses pengekodan biasanya mengelirukan. Kadang -kadang ia terasa seperti dua langkah ke hadapan dan satu langkah mundur. Dengan kata lain: beberapa kod yang anda tulis adalah hebat ... tetapi ada yang tidak. Di sinilah GIT dapat membantu anda: ia membolehkan anda menyimpan bahagian yang baik dan membuang perubahan yang anda tidak perlu lagi.

mari kita lihat senario sampel yang mengandungi beberapa perubahan "tempatan" (iaitu perubahan yang belum diserahkan).

5 Ways to Undo Mistakes with Git NOTA: Untuk gambaran yang lebih baik dan visualisasi yang lebih jelas, saya menggunakan klien Desktop Menara Git dalam beberapa tangkapan skrin. Anda tidak memerlukan menara untuk mempelajari tutorial ini.

mari kita selesaikan masalah dalam pertama. Perubahan yang kami buat sepenuhnya ke arah yang salah. Mari kita membatalkan semua perubahan dan mencipta status komit terakhir fail:

general.css Sila ambil perhatian bahawa, atau, saya boleh menggunakan arahan

untuk mencapai hasil yang sama. Tetapi kerana
$ git restore css/general.css
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
mempunyai banyak kegunaan dan makna yang berbeza, saya lebih suka menggunakan perintah

yang sedikit dikemas kini (ia hanya memberi tumpuan kepada jenis tugas ini). git checkout git checkout Soalan kedua kami dalam git restore agak rumit. Beberapa perubahan yang kami buat dalam fail ini sebenarnya baik, dan hanya sebahagiannya perlu didokumentasikan.

5 Ways to Undo Mistakes with Git

Sama, perintah

akan menyelesaikan masalah - tetapi kali ini anda perlu menggunakan bendera git restore, kerana kita akan masuk ke dalam tahap "patch": -p

$ git restore css/general.css
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
git akan membimbing anda dan bertanya kepada anda - untuk setiap perubahan dalam

dalam fail itu - jika anda mahu membuangnya.

anda akan melihat bahawa saya menaip "n" untuk perubahan blok pertama (untuk menyimpannya) dan "y" untuk perubahan blok kedua (untuk membuangnya). Sebaik sahaja proses selesai, anda akan melihat bahawa hanya sekeping pertama perubahan berharga kekal -seperti yang kita mahu! 5 Ways to Undo Mistakes with Git

Tetapkan semula fail tertentu ke keadaan terdahulu

Kadang -kadang, anda mungkin mahu memulihkan fail

spesifik

ke versi

spesifik . Sebagai contoh, anda tahu bekerja dengan baik pada satu ketika pada masa lalu, tetapi tidak sekarang. Pada ketika ini anda ingin kembali masa, tetapi hanya untuk fail khusus ini, bukan keseluruhan projek! kita perlu mengetahui versi tepat yang kita mahu pulihkan. Menggunakan set parameter yang betul, anda boleh memaparkan index.html paparan sejarah fail individu anda:

git log

$ git restore -p index.html
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Ini hanya akan menunjukkan

yang berubah -ubah, yang sangat berguna untuk mencari versi "Apple Bad" yang menyebabkan masalah muncul. 5 Ways to Undo Mistakes with Git

Jika anda memerlukan lebih banyak maklumat dan ingin melihat kandungan

ini, anda boleh menggunakan bendera index.html untuk memaparkan perubahan sebenar dalam komitmen ini:

Sebaik sahaja kita mendapati komitmen yang salah yang menyebabkan fail kecil kita comel kita rosak, kita boleh meneruskan untuk memperbaiki ralat. Kami akan melakukan ini dengan memulihkan versi fail sebelum -p komit! Ini penting: bukannya meneruskan fail dalam komitmen yang salah, kami memulihkan keadaan yang terakhir-yang satu sebelum komit!

$ git log -- index.html
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Menghadiri kepada nilai hash komit yang salah akan mengarahkan Git untuk melakukan perkara berikut: Pergi ke versi komit yang dirujuk sebelum

.
$ git log -p -- index.html
Salin selepas log masuk
Salin selepas log masuk

Selepas melaksanakan perintah ini, anda akan mendapati bahawa ~1 telah diubahsuai dalam salinan kerja tempatan anda: Git memulihkan versi terakhir yang baik untuk kami! pulih versi yang hilang menggunakan reflog

Satu lagi alat undo yang kuat dalam kit pertolongan cemas git adalah "reflog". Anda boleh memikirkannya sebagai log di mana Git merekodkan semua pergerakan penunjuk kepala yang berlaku di repositori tempatan-seperti komitmen, checkout, gabungan dan rebase, ceri-memilih, dan menetapkan semula. Semua operasi yang lebih penting akan direkodkan dengan baik di sini! index.html

Sudah tentu, log semacam itu sesuai untuk situasi di mana perkara tidak berjalan lancar. Oleh itu mari kita buat bencana kecil terlebih dahulu - maka kita boleh memperbaikinya dengan reflog.

Katakan anda yakin bahawa beberapa komitmen terakhir anda tidak baik: anda ingin menyingkirkannya, jadi anda menggunakan git reset untuk kembali ke versi sebelumnya. Akibatnya, "kesilapan" komitmen hilang dari sejarah komit anda - seperti yang anda mahukan.

5 Ways to Undo Mistakes with Git

Tetapi seperti yang kadang -kadang hidup, anda perhatikan bahawa ia adalah idea yang buruk: Akhirnya, penyerahan ini tidak begitu buruk! Tetapi berita buruk ialah anda hanya memadamkannya dari sejarah komited repositori anda! ?

5 Ways to Undo Mistakes with Git Ini adalah kes klasik alat reflog Git! Mari lihat bagaimana ia menyelamatkan anda:

$ git restore css/general.css
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

mari kita memecahkannya satu demi satu: 5 Ways to Undo Mistakes with Git

Pertama sekali, Reflog sangat mudah dibuka: A Simple

sudah cukup.
  • Kedua, anda akan melihat bahawa status yang direkodkan disusun mengikut susunan kronologi, dengan status terkini di bahagian atas. git reflog
  • Jika anda melihat dengan teliti, anda akan mendapati bahawa projek atas (iaitu, terbaru) adalah operasi "Reset". Inilah yang kami lakukan 20 saat yang lalu. Jelas sekali, log ini sah?
  • Jika kita mahu membatalkan "Reset" yang tidak disengajakan sekarang, kita hanya boleh kembali ke negeri kita yang terdahulu - ini juga didokumentasikan dengan baik di sini! Kita hanya boleh menyalin hash komit atas keadaan sebelumnya ke papan klip dan mulakan daripadanya.
  • Untuk memulihkan keadaan sebelumnya ini, kita boleh menggunakan
  • sekali lagi, atau hanya membuat cawangan baru:

git reset

Seperti yang kita dapat dengan senang hati mengesahkan, cawangan baru kita mengandungi komitmen yang kita fikir hilang melalui kegagalan
$ git restore -p index.html
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
yang tidak dijangka!

5 Ways to Undo Mistakes with Git Pulihkan cawangan yang dipadam

Reflog juga boleh berguna dalam situasi lain. Sebagai contoh, apabila anda secara tidak sengaja memadamkan cawangan yang anda tidak sepatutnya memadamkan. Mari kita lihat senario contoh kami: git reset

Mari kita anggap pelanggan/ketua pasukan/pengurus projek kami memberitahu kami bahawa analisis yang indah yang kami sedang membangun tidak lagi diperlukan. Kami teratur dengan baik dan sudah tentu kami akan memadamkan cawangan

yang sepadan!

Di atas, anda dapat melihat bahawa dalam senario contoh kami, kami sedang menyemak cawangan:
$ git log -- index.html
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
adalah cawangan kepala kami sekarang. Untuk dapat memadamkannya, kita mesti beralih ke cawangan lain:

$ git restore css/general.css
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

git memberitahu kita kita akan melakukan sesuatu yang sangat serius: Sejak feature/analytics mengandungi komitmen unik yang tidak wujud di tempat lain, memadamkannya akan memusnahkan beberapa data (mungkin berharga). Ok ... kerana ciri ini tidak lagi diperlukan, kita boleh meneruskan:

$ git restore -p index.html
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Anda mungkin menjangkakan apa yang akan berlaku seterusnya: Pemimpin klien/pasukan kami/pengurus projek dengan senang hati memberitahu kami bahawa ciri ini kembali! Mereka mahu terus menerus! ?

Begitu juga, kita menghadapi situasi yang buruk di mana kita mungkin kehilangan data berharga! Oleh itu, mari kita lihat jika reflog dapat menyelamatkan kita lagi:

$ git log -- index.html
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

5 Ways to Undo Mistakes with Git

Jika anda melihat dengan teliti, berita baik akan jelas. Sebelum kita dapat (bencana) dapat memadam cawangan kita, kita perlu lakukan

untuk beralih ke cawangan lain (kerana git tidak membenarkan anda memadam cawangan semasa). Sudah tentu, checkout ini juga direkodkan dalam reflog. Untuk memulihkan cawangan yang telah kita hapus, kita kini boleh menggunakan keadaan git checkout sebelum sebagai titik permulaan untuk cawangan baru:

$ git log -p -- index.html
Salin selepas log masuk
Salin selepas log masuk
Lihat: Cawangan kami telah kembali hidup! ???

Jika anda menggunakan GUI desktop seperti menara, membatalkan kesilapan tersebut biasanya semudah menekan

cmd z .

5 Ways to Undo Mistakes with Git bergerak komited ke cawangan yang berbeza

Akhirnya, mari kita lihat kes klasik "Oh, tidak!"

Hari ini, banyak pasukan telah merumuskan peraturan yang melarang penyerahan langsung kepada cawangan jangka panjang seperti "utama", "tuan" atau "membangunkan". Biasanya, komitmen baru hanya boleh mencapai cawangan ini dengan menggabungkan/rebase. Walau bagaimanapun, kita kadang -kadang lupa dan mengemukakan terus ...

mari kita ambil senario berikut sebagai contoh.

kita sepatutnya menyerahkan 5 Ways to Undo Mistakes with Git tetapi secara tidak sengaja mencetuskan komit pada cawangan

. Mari kita lihat langkah penyelesaian demi langkah.

feature/newsletter Pertama sekali, kita perlu memastikan kali ini kita berada di cawangan yang betul, jadi kita sedang menyemak master:

feature/newsletter Sekarang kita boleh memindahkan komit dengan selamat dengan menggunakan perintah

:
$ git checkout <bad-commit-hash>~1 -- index.html
Salin selepas log masuk

cherry-pick kita boleh menyemak

dan akan melihat bahawa komit sekarang juga hadir di sini.
$ git reflog
Salin selepas log masuk

feature/newsletter

Setakat ini, semuanya berjalan lancar. Tetapi cherry-pick tidak memadamkan komit dari cawangan master (ia selama -lamanya tidak boleh berada di sana). Oleh itu, kita perlu membersihkan kekacauan kita di sana juga:

$ git restore css/general.css
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kami beralih kembali ke master dan gunakan git reset untuk memadam (di sini) yang tidak diingini dari sejarah.

akhir, semuanya kembali ke normal-jadi anda boleh memulakan tarian gembira anda sekarang! ???

Ralat buka kunci adalah kuasa besar

Saya katakan sebelum ini, dan malangnya kita semua tahu itu benar: kita tidak dapat mengelakkan kesilapan! Tidak kira betapa baiknya kita pengaturcara, kita akan merosakkannya setiap sekarang dan kemudian. Jadi persoalannya bukan sama ada kita membuat kesilapan, tetapi bagaimana kita mengendalikannya dengan berkesan dan menyelesaikan masalah? Jika anda ingin mengetahui lebih lanjut mengenai alat Git Undo, saya sangat mengesyorkan "Git First Aid Kit". Ini adalah koleksi video pendek (percuma) yang menunjukkan cara membersihkan dan membatalkan kesilapan dalam Git.

Saya ingin anda perkembangan yang lancar, keberanian untuk mencuba, dan sudah tentu anda mesti baik untuk membaiki!

Soalan Lazim Mengenai Menggunakan Git Untuk Membatalkan Kesalahan (FAQ)

Apakah perbezaan antara

dan

?

git reset git revert dan

adalah dua perintah yang membantu anda membatalkan perubahan dalam repositori git anda, tetapi mereka bekerja dengan cara yang berbeza.

Gerakkan penunjuk kepala anda ke komit tertentu. Ini bermakna ia sebenarnya "lupa" semua yang anda miliki selepas menetapkan semula kepada komitmen. Ini adalah operasi yang merosakkan dan harus digunakan dengan berhati -hati. Sebaliknya, git reset mencipta komit baru untuk membatalkan perubahan yang dibuat dalam komit tertentu. Ini adalah operasi yang selamat kerana ia tidak mengubah sejarah yang sedia ada. git revert git reset Bagaimana untuk membatalkan operasi git revert?

Jika anda telah menggunakan git add untuk menyimpan perubahan dan ingin membatalkan ini, anda boleh menggunakan perintah

. Sebagai contoh, jika anda ingin membuat fail tertentu, anda boleh menggunakan arahan

. Sekiranya anda ingin membatalkan semua perubahan, anda boleh menggunakan git add tanpa menentukan fail tersebut. git reset git reset <file></file> Bolehkah saya membatalkan git reset?

Ya, anda boleh membatalkan menggunakan git commit atau

perintah.

Gerakkan penunjuk kepala anda kembali ke komit yang anda mahu membatalkan, berkesan menghapus komitmen yang tidak diingini. Sebaliknya, git reset akan mewujudkan komit baru untuk membatalkan perubahan yang dibuat dalam komit yang tidak diingini. git revert git commit Bagaimana untuk membatalkan perubahan dalam fail tertentu? git reset git revert Jika anda telah membuat perubahan pada fail tertentu dan ingin membatalkan perubahan ini, anda boleh menggunakan perintah

. Sebagai contoh,

akan membuang perubahan dalam direktori kerja tempatan fail yang ditentukan.

git stash Apa itu?

git stash adalah arahan yang membolehkan anda menyimpan perubahan sementara yang anda tidak mahu menyerahkan segera. Ini berguna jika anda perlu beralih ke cawangan yang berbeza tetapi tidak mahu melakukan perubahan semasa. Anda boleh menggunakan perubahan sementara kemudian menggunakan git stash apply.

Bagaimana untuk melihat sejarah git saya?

anda boleh menggunakan arahan git log untuk melihat sejarah git anda. Ini akan menunjukkan kepada anda senarai semua komitmen dalam repositori, serta mesej komitmen mereka.

Bolehkah saya membatalkan git push?

Ya, anda boleh membatalkan git push, tetapi ini sedikit lebih rumit daripada membatalkan perubahan tempatan. Anda perlu menggunakan perintah -f dengan pilihan --force atau git push untuk menimpa repositori jauh dengan repositori tempatan anda. Berhati -hati dengan perintah ini, kerana ia boleh menyebabkan masalah bagi orang lain yang berurusan dengan repositori yang sama.

bagaimana untuk membatalkan pelbagai komitmen?

Jika anda ingin membatalkan pelbagai komitmen, anda boleh menggunakan perintah git reset dan sintaks HEAD~<number></number>. Sebagai contoh, git reset HEAD~3 menggerakkan penunjuk kepala anda sebelum tiga melakukan.

Apakah perbezaan antara tetapan semula lembut dan tetapan semula keras?

Reset lembut menggerakkan penunjuk kepala anda ke komit tertentu, tetapi tidak mengubah direktori kerja dan kawasan pementasan anda. Ini bermakna anda masih akan melihat perubahan daripada "terlupa" yang dilakukan sebagai perubahan yang tidak komited. Sebaliknya, tetapan semula keras akan membuang semua perubahan dalam direktori kerja dan kawasan pementasan, dengan berkesan memulihkan repositori anda ke negeri pada masa komit yang ditentukan.

Bolehkah saya meneruskan komit selepas menetapkan semula keras?

Ya, komited boleh disambung semula selepas penetapan semula keras, tetapi tidak mudah. Git menyimpan log untuk semua kemas kini ref (seperti pointer kepala bergerak) dalam reflog. Anda boleh menggunakan perintah git reflog untuk mencari komited yang anda ingin pulih, dan kemudian gunakan git branch untuk membuat cawangan baru pada komit itu.

Atas ialah kandungan terperinci 5 cara untuk membatalkan kesilapan dengan git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan