Saya ingin mendefinisikan cabang "root" baru di repositori git ini. Cabang "root" yang saya maksud adalah cabang yang sepenuhnya independen dari semua cabang lain dalam repositori 1 .
Sayangnya, bahkan komit (sebut saja A) di bagian paling bawah dari pohon komit repo berisi banyak file (ini adalah repositori yang diinisialisasi pada proyek yang sudah cukup matang).
Ini berarti bahwa meskipun saya berikan Asebagai cabang baru <start-point>, cabang baru ini tidak akan mulai dari "sabak bersih", tetapi itu akan berisi semua file yang dilakukan A.
Apakah ada cara saya bisa membuat cabang yang benar-benar telanjang di repositori ini, dengan <start-point>sedekat Amungkin?
1 BTW, ini tidak setara dengan membuat repo baru. Repo yang terpisah akan kurang nyaman karena banyak alasan.
EDIT : OK, ini yang saya lakukan, berdasarkan jawaban vcsjones :
# save rev of the current earliest commit
OLDBASE=$(git rev-list --max-parents=0 HEAD)
# create a new orphan branch and switch to it
git checkout --orphan newbranch
# make sure it's empty
git rm -rf .
# create a new empty commit in the new branch, and
# save its rev in NEWBASE
git commit --allow-empty -m 'base commit (empty)'
NEWBASE=$(git rev-list HEAD)
# specify $NEWBASE as the new parent for $OLDBASE, and
# run filter-branch on the original branch
echo "$OLDBASE $NEWBASE" > .git/info/grafts
git checkout master
git filter-branch
# NOTE: this assumes that the original repo had only one
# branch; if not, a git-filter-branch -f <branch> command
# need to be run for each additional branch.
rm .git/info/grafts
Meskipun prosedur ini sedikit terlibat, hasil akhirnya adalah komit dasar kosong yang dapat berfungsi sebagai <start-point>untuk "cabang bersih-batu tulis" baru apa pun; yang perlu saya lakukan adalah
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
Di masa depan saya akan selalu membuat repositori baru seperti ini:
git init
git commit --allow-empty -m 'base commit (empty)'
... sehingga komit pertama kosong , dan selalu tersedia untuk memulai cabang independen baru. (Ini akan, saya tahu, fasilitas yang sangat jarang dibutuhkan, tetapi cukup mudah untuk membuatnya tersedia.)
git rebase --onto, lihat stackoverflow.com/questions/645450/…