Rumah > Artikel > alat pembangunan > 3 langkah untuk menyelesaikannya! Simpan rekod komit Git yang bersih
Artikel ini memberi anda pengetahuan tentang menjaga kebersihan Git rekod komit, termasuk "git commit –amend", "git rebase -i" dan "rebase" Soalan, harap ia membantu semua orang.
Pembelajaran yang disyorkan: "Tutorial Git"
Semua orang telah mempelajari cara menulis kod dalam standard dan ringkas cara , tetapi jarang belajar cara menyeragamkan dan ringkas serahkan kod. Pada masa kini, semua orang pada asasnya menggunakan Git sebagai alat pengurusan kod sumber Git memberikan fleksibiliti yang hebat. masalah biasa ialah sejarah log git yang tidak kemas, yang benar-benar pembalut kaki wanita tua, berbau dan panjang saya secara peribadi tidak suka log jenis ini
Punca masalah ini. sedang menghantar kod sesuka hati.
Kod telah diserahkan, adakah terdapat cara untuk menyimpannya? Tiga petua boleh menyelesaikan masalah dengan sempurna
Gunakan git commit –amend
--amend amend previous commitkomit terakhir
Ia boleh mengubah suai bukan sahaja mesej yang kami serahkan, tetapi juga fail yang kami serahkan, dan akhirnya menggantikan id-komit terakhir
.Kami mungkin terlepas fail tertentu semasa penyerahan tertentu Apabila kami menyerahkan semula, mungkin terdapat komit-id yang tidak berguna Jika semua orang melakukan ini, log git akan menjadi terlalu kemas untuk menjejaki fungsi yang lengkap
Andaikata kita mempunyai mesej log sedemikianAndaikan kita ingin mengubah suai mesej log terakhir, kita boleh menggunakan arahan berikut:
* 98a75af (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 * 119f86e feat: [JIRA123] add feature 1.1 * 5dd0ad3 feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
Mari kita lihat Looking pada maklumat log, kami dapati kami telah menggantikan commit-id lama 98a75af dengan commit-id baharu 5e354d1, mengubah suai mesej dan tidak menambah nod
git commit --amend -m "feat: [JIRA123] add feature 1.2 and 1.3"
Kini fail dalam repo kami kelihatan seperti ini :
* 5e354d1 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 and 1.3 * 119f86e feat: [JIRA123] add feature 1.1 * 5dd0ad3 feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
Andaikan kita terlupa fail konfigurasi config.yaml semasa menghantar ciri 1.3, dan tidak mahu mengubah suai log atau menambah id komit baharu, maka arahan berikut adalah sangat mudah untuk gunakan
. ├── README.md └── feat1.txt 0 directories, 2 files
git commit --amend --no-edit is the soul Lihat fail repo semasa:
echo "feature 1.3 config info" > config.yaml git add . git commit --amend --no-edit
Lihat log git
.. ├── README.md ├── config.yaml └── feat1.txt 0 directories, 3 files
Mengetahui teknik ini, kami dapat memastikan setiap penyerahan yang kami buat mengandungi maklumat yang sah. Gambar yang menerangkan proses kelihatan seperti ini:
* 247572e (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 and 1.3 * 119f86e feat: [JIRA123] add feature 1.1 * 5dd0ad3 feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
Dengan bonus buff --no-edit, ia lebih berkuasa
Gunakan dengan bijak git rebase -iAnda boleh melihat bahawa log di atas semuanya sedang membangunkan ciri1 Sebelum menggabungkan cabang ciri ke dalam cawangan utama, kita harus terus menggabungkan nod komit log Di sinilahgit rebase -i HEAD~nSelepas dijalankan, editor vim akan dipaparkan dengan kandungan berikut:
git rebase -i HEAD~3Kaedah yang paling biasa digunakan untuk menggabungkan commit-id ialah skuasy dan fixup Yang pertama mengandungi mesej commit dan yang kedua tidak menggunakan fixup di sini, dan kemudian :wq untuk keluar
1 pick 5dd0ad3 feat: [JIRA123] add feature 1 2 pick 119f86e feat: [JIRA123] add feature 1.1 3 pick 247572e feat: [JIRA123] add feature 1.2 and 1.3 4 5 # Rebase c69f53d..247572e onto c69f53d (3 commands) 6 # 7 # Commands: 8 # p, pick <commit> = use commit 9 # r, reword <commit> = use commit, but edit the commit message 10 # e, edit <commit> = use commit, but stop for amending 11 # s, squash <commit> = use commit, but meld into previous commit 12 # f, fixup <commit> = like "squash", but discard this commit's log message 13 # x, exec <command> = run command (the rest of the line) using shell 14 # d, drop <commit> = remove commit 15 # l, label <label> = label current HEAD with a name 16 # t, reset <label> = reset HEAD to a label 17 # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>] 18 # . create a merge commit using the original merge commit's 19 # . message (or the oneline, if no original merge commit was 20 # . specified). Use -c <commit> to reword the commit message. 21 # 22 # These lines can be re-ordered; they are executed from top to bottom. 23 # 24 # If you remove a line here THAT COMMIT WILL BE LOST. 25 # 26 # However, if you remove everything, the rebase will be aborted. 27 # 28 # 29 # Note that empty commits are commented out</commit></oneline></label></commit></commit></label></label></commit></command></commit></commit></commit></commit></commit>Mari kita kembali Lihat log, ia sangat jelas
1 pick 5dd0ad3 feat: [JIRA123] add feature 1 2 fixup 119f86e feat: [JIRA123] add feature 1.1 3 fixup 247572e feat: [JIRA123] add feature 1.2 and 1.3Gunakan rebase dengan baikCiri di atas telah dibangunkan sepenuhnya, dan cawangan utama juga telah dikemas kini oleh orang lain Kemudian gabungkan kembali ciri Sebelum cawangan utama, untuk mengelakkan konflik kod, anda perlu menggabungkan kandungan cawangan utama ke dalam ciri terlebih dahulu. Jika anda menggunakan arahan gabungan, akan ada gabungan tambahan nod, dan juga akan terdapat titik infleksi dalam sejarah log, yang bukan linear, jadi di sini Kita boleh menggunakan arahan rebase pada cawangan ciri
* 41cd711 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
git pull origin main --rebasePerintah tarik secara automatik melakukan penggabungan untuk kami, tetapi di sini ia adalah dalam bentuk rebase Mari kita lihat log Nod penyerahan fungsi feature1 kami di atas utama masih kekal. linear Seterusnya, anda boleh menolak kod, kemudian menyerahkan PR, dan menggabungkan ciri anda ke cawangan utama Penerangan ringkas tentang perbezaan antara gabungan dan asas semula ialah ini:
* d40daa6 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1 * 446f463 (origin/main, origin/HEAD) Create main.properties * c69f53d (origin/feature/JIRA123-amend-test, main) Initial commit
Saya menggunakan git pull origin main --rebase di sini untuk menghilangkan proses menukar utama dan menarik kandungan terkini dan kemudian menukar kembali Prinsip di belakangnya adalah seperti yang ditunjukkan dalam gambar di atas
Menggunakan rebase adalah Terdapat peraturan emas yang mesti dipatuhi Ini telah dikatakan sebelum ini, jadi saya tidak akan mengulanginya lagi
Dengan tiga petua ini, saya. percaya log git semua orang akan menjadi sangat jelas Jika anda belum mengetahuinya, anda pasti boleh menggunakannya Jika ahli kumpulan anda tidak mengetahuinya, anda pasti boleh mempromosikannya
Pembelajaran yang disyorkan: "Tutorial Git》
Atas ialah kandungan terperinci 3 langkah untuk menyelesaikannya! Simpan rekod komit Git yang bersih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!