Rumah > Peranti teknologi > industri IT > Panduan untuk Git Interactive Rebase, dengan contoh praktikal

Panduan untuk Git Interactive Rebase, dengan contoh praktikal

William Shakespeare
Lepaskan: 2025-02-10 15:12:12
asal
198 orang telah melayarinya

A Guide to Git Interactive Rebase, with Practical Examples

Git Interactive Base Change: Alat yang berkuasa untuk meningkatkan kecekapan pembangunan

Kawalan versi Git telah menjadi standard dalam kotak alat pemaju moden. Perintah seperti

, commit dan push telah lama menjadi memori otot. Walau bagaimanapun, secara relatifnya, beberapa pemaju memahami ciri -ciri "lebih maju" dalam Git dan nilai besar ciri -ciri ini! Artikel ini akan meneroka salah satu alat yang paling berkuasa dalam Git - "Rebase Interaktif". pull

mata teras

    Interaktif Rebase adalah alat Git yang kuat yang membolehkan pemaju untuk mewujudkan sejarah komit yang berstruktur, menjadikan asas kod projek lebih mudah dibaca dan difahami.
  • Rebase interaktif boleh digunakan untuk mengedit maklumat komit lama, memadam komitmen, menggabungkan pelbagai komitmen, menyusun semula, membaiki komitmen lama, dan berpecah/dibuka semula lama untuk mengedit.
  • Adalah penting untuk tidak menggunakan rebase interaktif pada komitmen yang telah dikongsi dengan rakan sekerja di repositori terpencil, kerana ia akan menulis semula sejarah. Sebaliknya, anda harus menggunakannya untuk membersihkan komitmen tempatan sebelum menggabungkannya ke cawangan pasukan.
  • Mekanisme asas operasi asas interaktif termasuk mengenal pasti bahagian sejarah penyerahan untuk dikendalikan, memulakan sesi dengan arahan
  • , dan kemudian menyatakan tindakan yang diperlukan dalam tetingkap editor terbuka.
  • git rebase -i Rebase interaktif boleh digunakan untuk mengedit maklumat komit lama, memadam komitmen yang tidak perlu, dan menggabungkan pelbagai komitmen menjadi satu, dengan itu mengoptimumkan dan membersihkan sejarah komit.
  • mengapa rebase interaktif harus menjadi sebahagian daripada setiap kotak alat pemaju
Singkatnya, tidak ada keterlaluan untuk mengatakan bahawa rebase interaktif dapat membantu anda menjadi pemaju yang lebih baik dengan membolehkan anda membuat sejarah komit yang bersih dan berstruktur dalam projek anda.

Kenapa sejarah penyerahan yang berstruktur penting? Bayangkan yang bertentangan: Sejarah penyerahan yang sukar dibaca, anda tidak tahu apa yang sebenarnya dilakukan oleh rakan sekerja anda. Akan ada lebih banyak "sudut gelap" dalam projek seperti ini, dan anda hanya tahu sebahagian kecil penyertaan anda.

Bandingkan dengan sejarah komit yang bersih dan berstruktur: ia membantu menjadikan asas kod projek lebih mudah dibaca dan

dan lebih mudah difahami. Ini adalah bahagian yang diperlukan dari program yang sihat dan berkekalan!

apa yang boleh dilakukan oleh perubahan asas interaktif untuk anda

Rebase interaktif membantu anda mengoptimumkan dan membersihkan sejarah komit anda. Ia meliputi banyak kes penggunaan yang berbeza, beberapa di antaranya membolehkan anda melakukan perkara berikut:

  • Edit Maklumat Penyerahan Lama
  • Padam penyerahan
  • menggabungkan/menggabungkan pelbagai komitmen
  • penyerahan semula
  • Betulkan komit lama
  • berpecah/membuka semula komit lama untuk mengedit

bila menggunakan rebase interaktif (dan bila tidak!)

Seperti beberapa alat git lain, secara interaktif semula "menulis semula sejarah". Ini bermakna apabila anda menggunakan operasi rebase interaktif untuk mengendalikan satu siri komitmen, bahagian sejarah komit akan ditulis semula oleh : Hash sha-1 komit akan berubah. Mereka adalah objek komit baru, jadi untuk mengatakan. Hakikat bahawa

memerlukan peraturan yang mudah tetapi penting untuk diikuti: Jangan gunakan rebase interaktif (atau alat lain untuk menulis semula sejarah) pada komitmen yang telah anda kongsi dengan rakan sekerja di repositori terpencil. Sebaliknya, gunakannya untuk membersihkan komitmen tempatan anda sendiri -contohnya, di salah satu cawangan ciri anda sendiri -dan kemudian menggabungkannya ke cawangan pasukan.

mekanisme asas operasi asas interaktif

Walaupun rebase interaktif boleh digunakan untuk pelbagai perkara, aliran kerja asas mereka sentiasa sama. Sebaik sahaja anda mempunyai pemahaman yang kukuh tentang mekanisme asas ini, Rebase interaktif kehilangan suasana "kompleks dan misteri" dan menjadi alat yang berharga dan mudah digunakan dalam kotak alat anda.

Langkah 1: Di manakah anda harus memulakan sesi?

Soalan pertama yang perlu anda jawab ialah: "Bahagian sejarah komit yang saya mahu beroperasi?" Mari kita berikan contoh praktikal, katakan kita ingin mengedit maklumat komit lama (ini adalah apa yang akan kita lakukan kemudian dalam amalan).

Keadaan permulaan kami ditunjukkan dalam gambar di bawah, kami mengedit maklumat penyerahan lama melalui asas perubahan interaktif.

Untuk dapat mengubah maklumat komit dalam C2, kita mesti memulakan sesi rebase interaktif pada komitmen induknya (atau lebih awal, jika anda lebih suka). Dalam contoh ini, kami akan menggunakan C1 sebagai titik permulaan untuk sesi rebase interaktif.

A Guide to Git Interactive Rebase, with Practical Examples Langkah 2: Mulakan sesi sebenar!

Memulakan sesi sebenar adalah sangat mudah:

Kami menggunakan perintah

dengan bendera

(menunjukkan bahawa kami benar -benar mahu ia menjadi "interaktif") dan memberikan komit asas (yang kami datang dengan langkah pertama di atas). Dalam contoh ini, saya menggunakan
<code>$ git rebase -i HEAD~3</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
untuk menentukan komit bahawa "tertinggal di belakang kepala melakukan 3 komitmen". Sebagai alternatif, saya juga boleh menyediakan hash SHA-1 tertentu.

-i Langkah 3: Beritahu git apa yang anda mahu lakukan git rebase HEAD~3 Selepas memulakan sesi rebase interaktif, anda akan melihat tetingkap editor di mana git menyenaraikan satu siri komitmen -dari komitmen terbaru sepanjang jalan ke (tetapi tidak termasuk) komit asas yang anda pilih dalam langkah 1 sebagai penyerahan komitom asas .

Dalam langkah ini, dua mata perlu diberi perhatian kepada:

  1. Penyerahan disenaraikan dalam urutan terbalik! Kami menjangkakan penyerahan terkini yang muncul di bahagian atas akan muncul di bahagian bawah senarai. Jangan risau: repositori git anda utuh! ? Jangan membuat perubahan sebenar dalam tetingkap editor ini! Walaupun anda mungkin tergoda untuk menukar maklumat komit secara langsung dalam tetingkap editor ini (selepas semua, itulah yang kami mahu lakukan ...), anda perlu bersabar. Di sini kita hanya memberitahu Git apa yang kita mahu lakukan - dan bukannya membuat perubahan sebenar. Saya akan menunjukkan ini dalam amalan tidak lama lagi!
  2. Dengan gambaran teori ini, mari kita menyelam beberapa kes praktikal bersama -sama!
  3. Edit Maklumat Penyerahan Lama

Salah satu kes penggunaan yang paling popular untuk rebase interaktif ialah anda boleh mengedit penyerahan lama selepas itu. Anda mungkin tahu bahawa

juga membolehkan anda menukar maklumat yang dikemukakan - tetapi ini hanya terpakai kepada penyerahan terkini

. Untuk apa -apa komited lebih tua daripada ini, kita perlu menggunakan Rebase interaktif!

mari kita lihat senario tertentu. Berikut adalah imej maklumat penyerahan ralat yang perlu diperbetulkan. git commit --amend

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 mengikuti tutorial ini.

A Guide to Git Interactive Rebase, with Practical Examples Untuk contoh kami, katakan kami ingin mengedit mesej untuk penyerahan semasa bertajuk "Optimalkan Struktur Markup dalam Indeks ...".

Langkah pertama kami adalah untuk menentukan komit asas sesi rebase interaktif ini. Oleh kerana kita harus (sekurang -kurangnya) kembali kepada komitmen induk "Apple Bad" kami, kami menggunakan (tiga komitmen di belakang Ketua komitmen, iaitu komitmen bertajuk "Tukar Tajuk ...") sebagai titik permulaan untuk Sesi:

Selepas melaksanakan arahan ini, editor kegemaran anda akan membuka dan memaparkan senarai komitmen yang anda pilih (dengan memberikan komit asas).

HEAD~3

Peringatan: Walaupun anda mungkin tergoda untuk melakukan ini, kami tidak akan mengubah maklumat penyerahan di sini. Kami hanya menggunakan "kata kunci operasi"
<code>$ git rebase -i HEAD~3</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
untuk menandakan baris yang sama

. Dalam kes kita, kita mahu mengatasi komitmen (yang bermaksud kita mahu mengubah maklumat komit, tetapi menyimpan komit lain).

Malah, semua kata kunci tindakan yang ada ditentukan di bahagian bawah tetingkap ini - jadi tidak perlu ingat apa -apa! A Guide to Git Interactive Rebase, with Practical Examples

Sebaik sahaja anda menggantikan kata kunci standard

dengan kata kunci tindakan pilihan anda (yang bermaksud "menerima komitmen seperti"), anda hanya menyimpan dan menutup tetingkap.

Selepas melakukan ini, tetingkap editor baru akan dibuka dengan maklumat komit semasa. Akhirnya, kita boleh melakukan apa yang kita rancangkan pada mulanya: edit mesej komit lama ini!

A Guide to Git Interactive Rebase, with Practical Examples

Selepas kami membuat perubahan dan simpan dan tutup tetingkap editor, sesi rebase interaktif adalah maklumat penyerahan kami yang lengkap telah dikemas kini! ?

Padam penyerahan yang tidak diingini

Rebase interaktif juga membolehkan anda memadam

lama yang berkomitmen dari sejarah yang anda tidak perlukan (atau tidak mahu). Bayangkan anda secara tidak sengaja memasukkan kata laluan peribadi dalam penyerahan baru -baru ini: Dalam kebanyakan kes, maklumat sensitif tersebut tidak boleh dimasukkan ke dalam asas kod.

Juga ingat bahawa hanya memadam maklumat dan melakukannya sekali lagi tidak menyelesaikan masalah anda: Ini bermakna kata laluan masih disimpan di repositori sebagai komit lama. Apa yang anda mahukan ialah memadam data ini sepenuhnya bersih dari repositori! A Guide to Git Interactive Rebase, with Practical Examples

marilah kita terlebih dahulu menentukan komit asas sesi rebase interaktif. Oleh kerana kita perlu memulakan sekurang -kurangnya dengan komitmen ibu bapa yang salah, kita menggunakan "mengoptimumkan struktur markup ..." komit sebagai asas kita:

Sila ambil perhatian bahawa kali ini saya menggunakan hash SHA-1 tertentu dalam perintah

. Sudah tentu, sebagai tambahan kepada Hash, saya juga boleh menggunakan

untuk mengendalikan komit itu.

<code>$ git rebase -i HEAD~3</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Selepas melaksanakan arahan ini, kami akan melihat senarai komit lagi.

git rebase -i HEAD~2

Kali ini, kami menggunakan kata kunci tindakan

untuk menghilangkan komitmen yang tidak diingini. Atau, dalam kes khas ini, kita hanya boleh memadamkan keseluruhan baris dari editor. Sekiranya baris tidak lagi wujud apabila menjimatkan dan menutup tetingkap (mewakili komit), Git akan memadamkan komit yang sama.

Apa sahaja yang anda pilih, selepas menyimpan dan menutup tetingkap editor, penyerahan akan dipadamkan dari sejarah repositori anda! A Guide to Git Interactive Rebase, with Practical Examples

Gabungkan pelbagai komitmen menjadi satu

Satu lagi kes penggunaan untuk rebase interaktif adalah apabila anda ingin menggabungkan pelbagai komitmen berasingan drop ke dalam satu. Sebelum kita menyelam bagaimana untuk bekerja, mari kita menghabiskan beberapa minit membincangkan kapan atau mengapa ia boleh menjadi berharga.

Secara umumnya, membuat komit "lebih besar" (dengan menggabungkan pelbagai komitmen menjadi satu) bukan strategi yang baik dalam kebanyakan kes. Peraturan umum adalah untuk mengekalkan komitmen sekecil mungkin, sebagai "lebih kecil" bermaksud "lebih mudah untuk dibaca dan difahami". Walau bagaimanapun, dalam beberapa kes, ini masih masuk akal. Berikut adalah dua contoh:

  • Bayangkan anda melihat sesuatu yang salah dengan komit lama. Anda kemudian boleh meneruskan untuk menghasilkan baru komited untuk menyelesaikan masalah ini. Dalam kes ini, masuk akal untuk menggabungkan ini menjadi satu: selepas semua, komitmen baru hanyalah "dihentikan" untuk menyelesaikan masalah yang tidak sepatutnya wujud. Dengan menggabungkan komitmen ini, nampaknya tidak ada masalah sama sekali!
  • Satu lagi contoh ialah apabila anda melihat bahawa anda melakukan sedikit terlalu terperinci. Membuat komitmen kecil adalah baik, tetapi mengisi sejarah komit anda dengan banyak yang tidak perlu kecil komited akan bermakna melebihi sasaran.
  • Prinsip -prinsip asas dalam kedua -dua contoh adalah sama: dengan menggabungkan dua (atau lebih) komitmen yang akan menjadi komitmen, anda mencipta sejarah komit yang lebih bersih dan lebih mudah dibaca!

mari kita lengkapkan contoh praktikal bersama -sama dan gunakan situasi yang ditunjukkan dalam gambar berikut sebagai keadaan permulaan kita.

Katakan bahawa semantiknya lebih masuk akal untuk menggabungkan kedua -dua komitmen ini. Menggunakan alat rebase interaktif, kita boleh melakukan ini: A Guide to Git Interactive Rebase, with Practical Examples

Setakat ini, anda sudah terbiasa dengan apa yang sedang berlaku: Tetingkap editor akan dibuka dengan senarai penyerahan. squash

<code>$ git rebase -i HEAD~3</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Saya telah menyebut bahawa dalam kes ini kita akan menggunakan kata kunci operasi

. Terdapat satu perkara penting untuk mengetahui tentang bagaimana

berfungsi: A Guide to Git Interactive Rebase, with Practical Examples Garis yang anda tandakan dengan kata kunci akan bergabung dengan garis -garis di atas!

Ini menerangkan mengapa saya menandakan baris 2 dengan kata kunci

dalam contoh kami. squash squash Selepas menyimpan dan menutup tetingkap ini, tetingkap baru akan dibuka. Ini kerana, dengan menggabungkan pelbagai komitmen, kita tentu akan membuat komit baru. Dan penyerahan ini juga memerlukan maklumat penyerahan, sama seperti penyerahan lain! squash

Apa yang anda lihat dalam tangkapan skrin di atas adalah apa yang Git telah disediakan untuk kami: ia menggabungkan maklumat penyerahan komit asal yang sepadan dengan beberapa komen. Jangan ragu untuk memadam mesej lama dan mulakan lebih -atau simpannya dan tambahkan lebih banyak maklumat.

Selepas menjimatkan dan menutup tetingkap editor ini, kami dengan bangga boleh berkata: Ia digunakan untuk menjadi dua komitmen berasingan, tetapi sekarang ia adalah satu komit!

A Guide to Git Interactive Rebase, with Practical Examples

Gunakan fungsi kuat perubahan asas interaktif

Saya harap anda bersetuju bahawa alat rebase interaktif Git sangat berharga! Sebagai pemaju, kita mesti berusaha untuk sejarah komitmen yang bersih dan jelas. Ini adalah faktor utama dalam menjaga asas kod yang sihat dan mudah difahami (untuk rakan sepasukan anda dan diri anda, selepas beberapa ketika telah berlalu).

Jika anda ingin mengetahui lebih lanjut, saya sangat mengesyorkan "Git First Aid Kit". Ini adalah koleksi video pendek (percuma) yang menunjukkan cara membersihkan dan membatalkan kesilapan dalam Git.

Bersenang -senang!

Git Perubahan Interaktif Base FAQ (FAQ)

Apakah perbezaan antara git rebase dan git gabungan?

git rebase dan git gabungan adalah dua cara yang berbeza untuk mengintegrasikan perubahan dari satu cawangan ke yang lain. GIT Gabungan adalah cara untuk menggabungkan kod secara langsung dari dua cawangan yang berbeza. Ia mewujudkan komitmen baru dalam sejarah, memelihara urutan kronologi yang dilakukan. Git Rebase, sebaliknya, adalah cara untuk bergerak atau menggabungkan satu siri komitmen menjadi komitmen asas baru. Ia seperti mengatakan "Saya mahu menambah kerja orang lain mengenai perubahan saya". Dalam erti kata lain, ia membolehkan anda meletakkan perubahan pada cawangan semasa di bahagian atas cawangan lain.

bagaimana untuk membatalkan git rebase?

Jika anda ingin membatalkan rebase git, anda boleh menggunakan arahan git reflog untuk mencari komit yang anda ingin kembali, dan kemudian gunakan arahan git reset --hard HEAD@{number}. Perintah git reflog memaparkan senarai setiap perubahan yang dibuat ke kepala, dan arahan git reset membolehkan anda menetapkan kepala semasa ke keadaan yang ditentukan.

Apakah tujuan Git Interactive Rebase?

Git Interactive Rebase membolehkan anda menukar komitmen dalam pelbagai cara, seperti penyuntingan, pemadaman, dan pemampatan. Anda bukan sahaja boleh mengubah maklumat komit, tetapi juga menukar kod sebenar (jika anda membuat kesilapan). Ini adalah alat yang berkuasa yang memberi anda kawalan sepenuhnya ke atas sejarah penyerahan projek anda.

Bagaimana menggunakan penyerahan mampatan pembolehubah asas interaktif Git?

pemampatan adalah perbuatan menggabungkan pelbagai komitmen dalam satu komit. Dalam Git, anda boleh memampatkan komit menggunakan arahan git rebase -i diikuti oleh hash komit untuk memampatkan. Dalam editor teks terbuka, anda boleh menandakan komit yang anda ingin memampatkan dengan menggantikan pick dengan squash atau s.

Apakah risiko menggunakan Git Interactive Rebase?

Walaupun Git Interactive Rebase adalah alat yang berkuasa, ia boleh berbahaya jika digunakan secara tidak wajar. Ia menulis semula sejarah komit, yang boleh menyebabkan masalah jika anda berhadapan dengan cawangan awam yang orang lain juga berurusan. Adalah disyorkan untuk menggunakannya di cawangan tempatan yang belum ditolak.

Bagaimana menyelesaikan konflik semasa asas perubahan git?

Bentrokan mungkin berlaku semasa proses rebase. Git akan berhenti sejenak dan membolehkan anda menyelesaikan konflik ini sebelum meneruskan. Anda boleh membetulkan perubahan yang bercanggah dengan mengedit fail dan kemudian gunakan git add untuk menambah fail yang diselesaikan untuk menyelesaikan konflik. Selepas semua konflik diselesaikan, anda boleh terus mengubah asas menggunakan git rebase --continue.

Bolehkah saya menggunakan asas perubahan interaktif git untuk memisahkan komit?

Ya, anda boleh memecah komitmen yang lebih kecil menggunakan Git Interactive Rebase. Ini sangat berguna jika anda membuat pelbagai perubahan dalam satu komit tetapi kemudian memutuskan bahawa mereka harus berasingan.

Bagaimana untuk mengedit maklumat penyerahan menggunakan asas perubahan interaktif Git?

anda boleh mengedit maklumat penyerahan semasa rebase interaktif. Dalam senarai penyerahan, gantikan pick dengan reword atau r untuk menandakan penyerahan untuk diedit. Apabila meneruskan, GIT akan membuka editor teks untuk setiap penyerahan yang ditandakan reword, membolehkan anda menukar maklumat penyerahan.

Apakah perbezaan antara git rebase dan tarik git?

Git pull adalah arahan yang mengambil perubahan dari repositori jauh dan menggabungkannya ke cawangan semasa. Sebaliknya, Git rebase adalah arahan yang bergerak atau menggabungkan satu siri komitmen menjadi komitmen asas baru. Walaupun kedua -dua arahan digunakan untuk perubahan integrasi, ia dilakukan secara berbeza.

Bolehkah saya menggunakan rebase interaktif git untuk menukar perintah komitmen?

Ya, anda boleh menggunakan Git Interactive Rebase untuk menukar susunan komitmen. Dalam senarai komit, anda hanya boleh menukar susunan baris untuk menukar susunan komitmen. Ini sangat berguna jika anda ingin menjadikan sejarah komit anda lebih logik atau lebih jelas.

Atas ialah kandungan terperinci Panduan untuk Git Interactive Rebase, dengan contoh praktikal. 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