Saya memiliki pertanyaan yang sama seperti yang ditanyakan di sini: Repositori git baru di direktori root untuk berlangganan repositori yang ada di sub-direktori
Saya mengikuti jawaban ini di sini: Repositori git baru di direktori root untuk berlangganan repositori yang ada di sub-direktori
Sekarang, gitk --all
perlihatkan dua sejarah: satu memuncak pada arus master
, dan satu lagi bernama original/refs/heads/master
.
Saya tidak tahu apa sejarah kedua ini, atau bagaimana menghapusnya dari repo. Saya tidak perlu dua riwayat di repositori saya.
Bagaimana saya menyingkirkannya?
Untuk mereproduksi diri sendiri:
mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'
Sekarang kita punya masalah dengan poster aslinya. Mari kita pindahkan root dari git repo ke project-root menggunakan jawaban yang terhubung di atas:
git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard
Sekarang, lihat masalah saya saat ini:
gitk --all &
git show-ref
Bagaimana cara saya singkirkan refs/original/heads/master
dan semua riwayat yang terkait?
sumber
Jawaban:
refs/original/*
apakah ada sebagai cadangan, jika Anda mengacaukan cabang filter Anda. Percayalah, itu ide yang sangat bagus.Setelah Anda memeriksa hasilnya, dan Anda sangat yakin bahwa Anda memiliki apa yang Anda inginkan, Anda dapat menghapus referensi yang dicadangkan:
atau jika Anda melakukan ini pada banyak referensi, dan Anda ingin menghapus semuanya:
(Itu diambil langsung dari manual cabang-filter.)
Ini tidak berlaku untuk Anda, tetapi untuk orang lain yang mungkin menemukan ini: Jika Anda melakukan filter-branch yang menghapus konten yang menggunakan ruang disk yang signifikan, Anda mungkin juga ingin menjalankan
git reflog expire --expire=now --all
dangit gc --prune=now
untuk kedaluwarsa reflog Anda dan menghapus objek yang sekarang tidak digunakan. . (Peringatan: sepenuhnya, benar-benar tidak dapat dipulihkan. Pastikan sebelum Anda melakukannya.)sumber
git update-ref -d refs/original/refs/heads/master
git update-ref -d original/refs/heads/master
? Namun, hanya perintah kedua Anda yang berhasil untuk saya.git update-ref -d refs/original/refs/heads/master
btw. Anda dapat melihat nama lengkap menggunakangit show-ref
.git show-ref refs/original/* --hash | xargs -n 1 git update-ref -d
?Dan jika Anda menggunakan Windows PowerShell:
sumber
filter-branch
menyimpan cadangan sehingga repositori perlu membersihkan reflog dan pengumpulan sampah. Pastikan Anda tidak perlu mencadangkan ini sebelum dihapus:sumber