在帮助朋友解决git问题的同时,我不得不介绍一个需要与分支完全分离的master分支.这个分支的内容确实与master分支上开发的内容有不同的起源,但它们将master在以后合并到分支中.
我记得从底层向上阅读John Wiegley的Git,分支本质上是一个遵循某个约定的提交的标签,以及如何将提交绑定到文件树,并且可选地绑定到父提交.我们使用git的管道创建了对现有存储库的无父提交:
所以我们摆脱了索引中的所有文件......
$ git rm -rf .
Run Code Online (Sandbox Code Playgroud)
...从tarball中提取目录和文件,将其添加到索引中...
$ git add .
Run Code Online (Sandbox Code Playgroud)
...并创建了一个树对象......
$ git write-tree
Run Code Online (Sandbox Code Playgroud)
(git-write-tree告诉我们创建的树对象的sha1sum.)
然后,我们提交了树,没有指定父提交......
$ echo "Imported project foo" | git commit-tree $TREE
Run Code Online (Sandbox Code Playgroud)
(git-commit-tree告诉我们创建的提交对象的sha1sum.)
...并创建了一个指向新创建的提交的新分支.
$ git update-ref refs/heads/other-branch $COMMIT
Run Code Online (Sandbox Code Playgroud)
最后,我们回到master分公司继续在那里工作.
$ git checkout -f master
Run Code Online (Sandbox Code Playgroud)
这似乎按计划进行.但这显然不是我推荐给刚刚开始使用git的人的一种程序,温和地说.有没有更简单的方法来创建一个与目前存储库中发生的所有内容完全无关的新分支?
我想在这个git存储库中定义一个新的"root"分支."root"分支是指完全独立于存储库1中所有其他分支的分支.
不幸的是,甚至在Arepo的提交树的基础上提交(让我们称之为)包含很多文件(这是一个在已经相当成熟的项目上初始化的存储库).
这意味着即使我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 …Run Code Online (Sandbox Code Playgroud) 我有一个包含项目的git repo.我现在要对该项目进行大规模的改革.
如何为此次大修创建一个新分支?然后完成.如何将此分支切换为主分支?
我的仓库中有一个分支:开发。代码已经提交并推送到那里。
\n\n存储库中没有主分支。
\n\n我想创建一个主分支,以便我可以向其中提出拉取请求。
\n\n我已经尝试过两种方法:\n1. 从开发创建主分支:
\n\ngit checkout develop\ngit checkout -b master develop\nRun Code Online (Sandbox Code Playgroud)\n\n这里的问题是没有什么可以比较的:master 和development 已经是一样的了。
\n\ngit checkout --orphan master\ngit reset --hard\nRun Code Online (Sandbox Code Playgroud)\n\n这里的问题是分支有不同的历史记录,我得到:\n“没有\xe2\x80\x99t任何东西可以比较。(分支)是完全不同的提交历史记录”
\n\ngit 版本 2.17.2 (Apple Git-113)
\n\n如何创建一个空的 master 以便我可以从现有的开发中提出 Pull 请求?
\n新项目的 git 存储库的主分支仅包含原型/spike 代码。既然我已经理解了基本思想,我就要从头开始编码。
我希望主分支清除所有原型代码。理想情况下,原型代码需要移至分支中,以便我以后仍然可以使用它。
是否可以将 master 重置回第一次提交之前?执行此操作的 git 命令是什么?