我想在这个git仓库中定义一个新的“ root”分支。“根”分支是指完全独立于存储库1中所有其他分支的分支。
不幸的是,即使在A回购的提交树的最底层的提交(我们称它为)也包含很多文件(这是在一个已经相当成熟的项目上初始化的存储库)。
这意味着即使我给出A了新分支的名称<start-point>,该新分支也不会从“干净的板岩”开始,而是将包含在中提交的所有文件A。
有什么办法可以在此存储库中创建一个<start-point>尽可能接近的完全裸分支A?
1 BTW,这不等同于创建新的仓库。出于很多原因,单独的回购可能不太方便。
编辑:好的,这是我基于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
尽管此过程涉及到一点点,但最终结果是一个空的基本提交,可以用作<start-point>任何新的“ clean-slate分支”。我要做的就是
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
将来,我将始终创建如下这样的新存储库:
git init
git commit --allow-empty -m 'base commit (empty)'
...因此第一次提交为空,并且始终可用于启动新的独立分支。(据我所知,这是一种很少需要的工具,但是要使它易于使用非常容易。)
git rebase --onto,请参阅stackoverflow.com/questions/645450/...