Bagaimana mendorong cabang baru tanpa sejarah

95

Saya memiliki git repo dengan dua cabang yang tidak terkait, master dan konfigurasi. Saya telah membuat konfigurasi, membersihkan semua file dan kemudian menempatkannya di file konfigurasi saja. Sekarang saya ingin mendorong ini pada repo jarak jauh, tetapi karena ini adalah cabang baru yang kosong (tanpa log dari semua perubahan saya dan revisi lama dari cabang asli).

Bagaimana saya bisa membersihkan semua sejarah dan mendorongnya?

Tomas Pruzina
sumber

Jawaban:

157

Membersihkan semua file tidak menghilangkan riwayat. Anda perlu membuat cabang yang tidak memiliki sejarah terlebih dahulu, dan menambahkan file konfigurasi Anda. Hari-hari ini git checkoutmemiliki --orphanopsi yang membuat cabang tanpa sejarah. Berikut informasi tentang --orphanopsinya:

--orphan <branch_baru>

Buat cabang yatim piatu baru, bernama <new_branch>, dimulai dari <start_point> dan ganti ke cabang tersebut. Komit pertama yang dibuat pada cabang baru ini tidak akan memiliki induk dan ini akan menjadi akar dari riwayat baru yang sama sekali terputus dari semua cabang dan komit lainnya.

Indeks dan pohon kerja disesuaikan seolah-olah Anda sebelumnya telah menjalankan "git checkout <start_point>". Hal ini memungkinkan Anda untuk memulai riwayat baru yang merekam sekumpulan jalur yang mirip dengan <start_point> dengan menjalankan "git commit -a" dengan mudah untuk membuat root commit.

Ini bisa berguna ketika Anda ingin mempublikasikan pohon dari komit tanpa mengekspos sejarah lengkapnya. Anda mungkin ingin melakukannya untuk memublikasikan cabang open source dari sebuah proyek yang pohonnya saat ini "bersih", tetapi yang riwayat lengkapnya berisi bit kode berpemilik atau terbebani.

Jika Anda ingin memulai riwayat terputus yang merekam sekumpulan jalur yang sama sekali berbeda dari salah satu <start_point>, Anda harus menghapus indeks dan pohon kerja segera setelah membuat cabang yatim piatu dengan menjalankan "git rm -rf. " dari tingkat atas pohon kerja. Setelah itu Anda akan siap untuk menyiapkan file baru Anda, mengisi kembali pohon kerja, dengan menyalinnya dari tempat lain, mengekstrak tarball, dll.

Berikut link ke dokumentasi untuk checkout . Anda juga bisa berlari git help checkoutjuga.

Setelah Anda membuat cabang Anda tanpa riwayat, kemudian ketika Anda mendorongnya ke server, itu juga tidak akan memiliki riwayat itu. FWIW, ini membantu saya untuk memikirkan git pushsebagai "membuat cabang jarak jauh terlihat sama dengan cabang lokal saya". Jadi jika Anda memiliki sejarah, dan mendorong, itu akan memiliki sejarah. Jika tidak, maka cabang yang didorong tidak.

John Szakmeister
sumber
37

Bagaimana saya bisa membersihkan semua sejarah dan mendorongnya?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Kemudian Anda dapat menjalankan file

git push <remote-name> <branch-name>


cf. satu baris ini

Geremia
sumber
16

Saya perlu melakukan ini untuk mengirim seorang freelancer beberapa kode tanpa membagikan informasi pribadi atau menghapus riwayat saya.

Jika ada di antara Anda yang menggunakan SourceTree, beginilah cara saya melakukannya. Tolong beri tahu saya jika saya melakukan sesuatu yang salah atau saya lupa sesuatu karena saya sangat tidak terbiasa dengan manajemen kendali sumber.

  1. Saya pergi ke tombol terminal di pohon sumber.
  2. Saya membuat cabang 'orphan' baru dengan menggunakan perintah: 'git checkout --orphan clean-ver' di mana clean-ver adalah nama cabang saya
  3. Saya menutup terminal dan melihat bahwa log komit saya dihapus karena saya berada di cabang yatim piatu yang baru. Saya menyusun semua kode sumber saya dan melakukan perubahan.
  4. Saya mengatur repositori bitbucket saya di salah satu repositori> tambahkan jarak jauh atau repositori> pengaturan repositori> tambah.
  5. Saya menutupnya, dan mengklik tombol tekan
  6. Saya memilih cabang 'bersih-ver' saya yang baru berkata oke.

Ketika saya memeriksa bitbucket, tampaknya ini berfungsi dan membuang riwayat komit saya.

Semoga ini membantu seseorang.

ThinkBonobo
sumber