Rumah >alat pembangunan >git >Jadikan sejarah git commit anda bersih dengan tiga baris kod
Artikel ini membawakan anda pengetahuan yang berkaitan tentang git terutamanya tentang cara menyimpan rekod git anda dengan kemas. Saya harap ia dapat membantu semua orang.
Pengarang baru-baru ini telah mengetuai kerja migrasi seni bina sesuatu projek Disebabkan beban sejarah projek migrasi yang berat dan jumlah kerjasama kakitangan yang besar tidak dapat dielakkan untuk menjalankan berbilang cawangan, Dalam kes berbilang komit, seiring dengan berlalunya masa, rekod penyerahan git akan menjadi huru-hara Saya hanya akan mengambil sejarah penyerahan git grafik untuk memberi anda rasa.
Pelbagai cabang bertarung seperti gundik gila di harem Punca mengapa ini berlaku terutamanya disebabkan oleh penyalahgunaan arahan git merge dan kekurangan kos pemahaman berikutnya . Pengaturcara yang bekerja di kilang besar hari ini kerap menerima perubahan Apabila mereka tidak dipertimbangkan dengan teliti pada mulanya, sebilangan besar log komit yang tidak bermakna pasti akan muncul Ditambah dengan promosi konsep "tangkas", perubahan pantas produk dalam talian. Selepas menjadi penunjuk teras, log komit yang tidak bermakna ini "diproses lain kali" dan menjadi huru-hara dari semasa ke semasa.
Apabila kita melihat beberapa repositori sumber terbuka, kita akan mendapati bahawa rekod komit mereka sangat kemas, sebenarnya, ini bukan kerana pengaturcara dalam komuniti lebih berkebolehan, tetapi kerana mereka tidak mempunyai kayu KPI untuk menyebat mereka apabila menyerahkan kod saya akan menghabiskan masa mengatur log komit saya sebelum ini. Dan ini ialah protagonis artikel ini-"Git Rebase".
git rebase, diterjemahkan sebagai "rebase" dalam bahasa Cina, biasanya digunakan untuk penggabungan cawangan. Memandangkan penggabungan cawangan disebut, perintah git merge
mestilah sangat diperlukan.
Saya percaya bahawa setiap pengaturcara baru akan mendengar perkataan "xxx, sila gabungkan cawangan ini" apabila mereka mula-mula memasuki tempat kerja. Jadi inilah masalahnya. Jika anda mempunyai 6 pengaturcara yang bekerja bersama-sama, anda akan mempunyai 6 cawangan pengaturcara Jika anda menggunakan gabungan, pepohon sejarah kod anda akan mempunyai enam cabang yang saling berkaitan.
Gambar di atas ialah carta alir bagi operasi git merge
The Merge akan mengekalkan masa sejarah semua komit. Penyerahan kod setiap orang adalah berbeza-beza. Walaupun masa-masa ini tidak bermakna apa-apa kepada program itu sendiri. Tetapi niat asal arahan gabungan adalah untuk mengekalkan masa ini daripada diubah suai. Akibatnya, struktur sejarah rangkaian berdasarkan masa cantum terbentuk. Setiap cawangan akan terus mengekalkan rekod kodnya sendiri, dan hanya sejarah gabungan akan dikekalkan pada cawangan utama. Cawangan kecil boleh dipadamkan pada bila-bila masa. Selepas sub-molekul dipadamkan, rekod yang anda boleh lihat ialah gabungan cawangan tertentu ke cawangan tertentu. Akaun sejarah ini pada asasnya tidak bermakna.
Dan git rebase
diterjemahkan sebagai "dasar perubahan" dalam bahasa Cina, dan pangkalan merujuk kepada garis dasar. Bagaimana untuk memahami penanda aras ini? Jom lihat gambar di bawah.
Kita dapat lihat bahawa cawangan asas cawangan ciri telah berubah selepas rebasing dan menjadi master terkini. Ini dipanggil "rebasing".
Dapat dilihat dengan jelas daripada dua gambar di atas bahawa perbezaan terbesar antara kedua-dua cara penggabungan cawangan ini ialah cawangan yang digabungkan akan mengekalkan rekod operasi kedua-dua cawangan, iaitu dalam pokok log git commit akan disimpan dalam format silang. Cawangan selepas rebase akan berdasarkan cawangan induk terkini, jadi tidak akan ada garpu dan ia akan menjadi garis lurus yang bersih dari awal hingga akhir.
Penggunaan terperinci
git rebase
dangit merge
adalah di luar skop artikel ini Untuk butiran, anda boleh merujuk maklumat lain di Internet.
Semasa proses rebase, kami biasanya perlu membuat pengubahsuaian komit, dan ini juga menyediakan pilihan untuk kami mengatur rekod git.
Andaikan kami mempunyai gudang, dan saya telah melakukan 4 komitmen dalam gudang ini Lihat rekod komit melalui arahan git reflog
seperti berikut.
Jika kita ingin menggabungkan komit Komit-3, Komit-2 dan Komit-1 menjadi satu komit (dengan mengandaikan bahawa komit tertentu telah menukar beberapa fail pom), kami Anda boleh terus melaksanakan perintah berikut
git rebase -i HEAD~3
-i
merujuk kepada --interactive
dan HEAD~3
merujuk kepada tiga komitmen terakhir.
Sudah tentu, kami juga boleh menentukan secara langsung ID Komit terkini yang ingin kami simpan Dalam contoh di atas, ia adalah ID Komit-0, jadi kami juga boleh tuliskannya sebagai
git rebase -i d2b9b78
Selepas melaksanakan arahan ini, kami akan memasuki antara muka berikut:
这个界面是一个Vim界面,我们可以在这个界面中查看、编辑变更记录。有关Vim的操作,可以看我之前写的文章和录制的视频《和Vim的初次见面》
在看前三行之前,我们先来看一下第5行的命令加深一下我们对git rebase
的认识。
翻译过来就是,将d2b9b78..0e65e22
这几个分支变基到d2b9b78
这个分支,也就是将Commit-3/2/1/0
这几次变更合并到Commit-0
上。
回到前面三行,这三行表示的是我们需要操作的三个 Commit,每行最前面的是对该 Commit 操作的 Command。而每个命令指的是什么,命令行里都已经详细的告诉我们了。
pick
:使用该commitsquash
:使用该 Commit,但会被合并到前一个 Commit 当中fixup
:就像 squash
那样,但会抛弃这个 Commit 的 Commit message因此我们可以直接改成下面这样
这里使用fixup,而不是squash的主要原因是squash会让你再输入一遍commit的log,图省事的话,可以无脑选择fixup模式。
然后执行:wq
退出vim编辑器,我们可以看到控制台已经输出Successful了。
这个时候我们再来看下log 记录,执行git log --oneline
于是最近三次的提交记录就被合并成一条提交记录了。
那如果不是最后的几个commit合并,而是中间连续的几个Commit记录,可以用上述方法整理合并吗?答案是可以的,只不过需要注意一下。
我们重新创建一个新的仓库
如果这次我们想将"third commit"和"second commit"合并为一个提交,其实和上面的方式一样,我们只需执行git rebase -i HEAD~3
,然后将中间的提交改成fixup/squash
模式即可,如下图所示:
之所以是HEAD~3,是因为我们要做的变更是基于first commit做的,因此我们也可以写成
git rebase -i a1f3929
我们来看下更改完的commit log,如下图所示:
是不是就干掉了third commit了。
上面我们都是在本地的git仓库中进行的commit记录整理,但是在实际的开发过程中,我们基本上都是写完就直接push到远程仓库了,那应该如何让远程的开发分支也保持记录的整洁呢?
第一种做法是在push代码前就做在本地整理好自己的代码,但是这种做法并不适用于那种本地无法部署,需要部署到远程环境才能调试的场景。
这时我们只需要执行git push -f
命令,将自己的修改同步到远程分支即可。
-f
是force强制的意思,之所以要强制推送是因为本地分支的变更和远程分支出现了分歧,需要用本地的变更覆盖远程的。
而远程分支更新后,如果其他人也在这条分支上更改的话,还需要执行一个git pull
命令来同步远程分支。
这里我们来总结下让git提交记录保持整洁的三行代码。
git rebase -i xxx git push -f git pull
❗️❗️❗️Tips:由于rebase和push -f是有些危险的操作,因此只建议在自己的分支上执行哦。
推荐学习:《Git视频教程》
Atas ialah kandungan terperinci Jadikan sejarah git commit anda bersih dengan tiga baris kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!