Soalan ini agak A/B, kerana anda tidak menerangkan senario pemadaman rekod komit lama dahulu, yang sangat penting kerana ia akan menjejaskan pilihan penggunaan Git yang seterusnya. Contohnya:
Jika saya ingin memadamkan penyerahan daripada sejarah yang dihantar sebelum peperiksaan, tetapi masih banyak penyerahan yang perlu dikekalkan kemudian:
1.2 Jika rekod sejarah yang akan dipadam bertaburan, anda boleh mempertimbangkan Interactive Rebase, pilih/gabungkan sendiri, dsb. Seperti git rebase -i <ref>
1.1 Jika rekod sejarah yang akan dipadamkan adalah berterusan, sebagai contoh, semua rekod dari awal hingga saat tertentu boleh dipadamkan atau bahagian di tengah boleh dipadamkan, anda boleh mempertimbangkan Onto Rebase, seperti sebagai git rebase --onto <ONTO_BASE_ref> <START_ref> <END_ref>, dengan START Bahagian antara END ialah bahagian yang perlu dikekalkan, dan ONTO_BASE ialah titik asas terkini, dengan kata lain, rekod sejarah antara ONTO_BASE dan START akan dipadamkan.
Jika saya ingin memadamkan banyak rekod sejarah dan menyimpan sangat sedikit (sebagai contoh, simpan yang paling terkini, saya tidak mahu lagi), maka saya boleh mencipta Cawangan Yatim untuk membina semula rekod. Sebagai contoh, git checkout --orphan new_start, arahan ini akan mencipta cawangan yang dipanggil new_start Cawangan ini tidak mempunyai sebarang sejarah, tetapi semua fail akan wujud secara utuh dan anda boleh mula menyerahkan semula dengan sewajarnya. Selepas selesai, anda juga boleh membuang cawangan lama secara langsung. Selain itu, anda juga boleh menentukan titik permulaan cawangan baharu. Lalai sudah tentu bermula dari HEAD.
Anda juga boleh membahagikan rekod sejarah kepada dua (atau lebih) bahagian, sebahagian daripadanya lengkap, sebahagian daripadanya dipermudahkan, dsb. Untuk butiran, sila rujuk dokumen ini tentang git replace: http://git -scm.com/2010/03/17/replace.html
Sebenarnya, terdapat banyak senario yang boleh dikatakan Penggunaan Git sangat fleksibel Walaupun anda tidak menggunakannya buat sementara waktu, ia patut dibaca dengan teliti untuk mengetahui jenis perkara yang boleh dilakukannya maka anda boleh menyimpulkannya sendiri apabila menghadapi pelbagai senario yang kompleks. Terdapat penyelesaiannya.
Sebagai penyelenggara Repo, perkara yang paling biasa ialah menyimpannya daripada rujukan tertentu kepada HEAD, dan kemudian memadamkan sejarah sebelumnya. Oleh kerana tugasan ini agak biasa, berikut ialah skrip shell untuk dikongsi dengan anda:
digunakan seperti ini (contohnya, skrip disimpan sebagai git-detach): git-detach <ref>, dengan <ref> ialah titik permulaan rekod sejarah yang anda ingin simpan.
Perlu diambil perhatian bahawa skrip ini hanya "memisahkan" rekod sejarah, dan kemudian beberapa daripadanya tidak mempunyai rujukan yang boleh dilihat dan tidak kelihatan dalam rekod sejarah Walau bagaimanapun, objek git mereka masih wujud (. Dalam erti kata lain, anda masih boleh memulihkan dan menyemak git-reflog sendiri Jika anda benar-benar mahu membuang sepenuhnya sejarah ini (untuk menurunkan berat badan untuk repo), anda boleh menggunakan git gc --prune, dan anda tidak akan mendapat. ia kembali.
P.S. Skrip ini bergantung pada Cawangan Orphan, yang tidak disokong oleh versi Git yang lebih rendah (mungkin < v1.7.x jika anda mempunyai alternatif, sila Google sendiri).
Soalan ini agak A/B, kerana anda tidak menerangkan senario pemadaman rekod komit lama dahulu, yang sangat penting kerana ia akan menjejaskan pilihan penggunaan Git yang seterusnya. Contohnya:
1.2 Jika rekod sejarah yang akan dipadam bertaburan, anda boleh mempertimbangkan Interactive Rebase, pilih/gabungkan sendiri, dsb. Seperti
git rebase -i <ref>
1.1 Jika rekod sejarah yang akan dipadamkan adalah berterusan, sebagai contoh, semua rekod dari awal hingga saat tertentu boleh dipadamkan atau bahagian di tengah boleh dipadamkan, anda boleh mempertimbangkan Onto Rebase, seperti sebagai
git rebase --onto <ONTO_BASE_ref> <START_ref> <END_ref>
, denganSTART
Bahagian antaraEND
ialah bahagian yang perlu dikekalkan, danONTO_BASE
ialah titik asas terkini, dengan kata lain, rekod sejarah antaraONTO_BASE
danSTART
akan dipadamkan.git checkout --orphan new_start
, arahan ini akan mencipta cawangan yang dipanggilnew_start
Cawangan ini tidak mempunyai sebarang sejarah, tetapi semua fail akan wujud secara utuh dan anda boleh mula menyerahkan semula dengan sewajarnya. Selepas selesai, anda juga boleh membuang cawangan lama secara langsung. Selain itu, anda juga boleh menentukan titik permulaan cawangan baharu. Lalai sudah tentu bermula dariHEAD
.git replace
: http://git -scm.com/2010/03/17/replace.htmlSebenarnya, terdapat banyak senario yang boleh dikatakan Penggunaan Git sangat fleksibel Walaupun anda tidak menggunakannya buat sementara waktu, ia patut dibaca dengan teliti untuk mengetahui jenis perkara yang boleh dilakukannya maka anda boleh menyimpulkannya sendiri apabila menghadapi pelbagai senario yang kompleks. Terdapat penyelesaiannya.
Sebagai penyelenggara Repo, perkara yang paling biasa ialah menyimpannya daripada rujukan tertentu kepada HEAD, dan kemudian memadamkan sejarah sebelumnya. Oleh kerana tugasan ini agak biasa, berikut ialah skrip shell untuk dikongsi dengan anda:
digunakan seperti ini (contohnya, skrip disimpan sebagai
git-detach
):git-detach <ref>
, dengan<ref>
ialah titik permulaan rekod sejarah yang anda ingin simpan.Perlu diambil perhatian bahawa skrip ini hanya "memisahkan" rekod sejarah, dan kemudian beberapa daripadanya tidak mempunyai rujukan yang boleh dilihat dan tidak kelihatan dalam rekod sejarah Walau bagaimanapun, objek git mereka masih wujud (. Dalam erti kata lain, anda masih boleh memulihkan dan menyemak
git-reflog
sendiri Jika anda benar-benar mahu membuang sepenuhnya sejarah ini (untuk menurunkan berat badan untuk repo), anda boleh menggunakangit gc --prune
, dan anda tidak akan mendapat. ia kembali.P.S. Skrip ini bergantung pada Cawangan Orphan, yang tidak disokong oleh versi Git yang lebih rendah (mungkin < v1.7.x jika anda mempunyai alternatif, sila Google sendiri).