在帮助朋友解决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的人的一种程序,温和地说.有没有更简单的方法来创建一个与目前存储库中发生的所有内容完全无关的新分支?
tco*_*ovo 488
有一个新功能(自V1.7.2起)使这项任务比任何其他答案中的任务更高级.
git checkout现在支持该--orphan选项.从手册页:
git checkout [-q] [-f] [-m] --orphan <new_branch> [<start_point>]
创建一个名为<new_branch> 的新孤立分支,从<start_point>启动并切换到它.在这个新分支上进行的第一次提交将没有父项,它将成为与所有其他分支和提交完全断开的新历史的根.
这并不完全是提问者想要的,因为它填充了索引和工作树<start_point>(因为这毕竟是一个checkout命令).唯一需要的其他操作是从工作树和索引中删除任何不需要的项目.不幸的是,git reset --hard不起作用,但git rm -rf .可以代替使用(我相信这相当于rm .git/index; git clean -fdx其他答案中给出的).
综上所述:
git checkout --orphan newbranch
git rm -rf .
<do work>
git add your files
git commit -m 'Initial commit'
Run Code Online (Sandbox Code Playgroud)
我没有<start_point>指定,因为它默认为HEAD,我们并不关心.这个序列与Artem的答案中的命令序列基本相同,只是没有使用可怕的管道命令.
Art*_*rov 31
来自Git社区书籍:
git symbolic-ref HEAD refs/heads/newbranch
rm .git/index
git clean -fdx
<do work>
git add your files
git commit -m 'Initial commit'
Run Code Online (Sandbox Code Playgroud)
Jak*_*ski 22
虽然使用git symbolic-ref和删除索引的解决方案有效,但创建新存储库可能在概念上更清晰
$ cd /path/to/unrelated
$ git init
[edit and add files]
$ git add .
$ git commit -m "Initial commit of unrelated"
[master (root-commit) 2a665f6] Initial commit of unrelated
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
Run Code Online (Sandbox Code Playgroud)
然后从中获取
$ cd /path/to/repo
$ git fetch /path/to/unrelated master:unrelated-branch
warning: no common commits
remote: Counting objects: 3, done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From /path/to/unrelated
* [new branch] master -> unrelated-branch
Run Code Online (Sandbox Code Playgroud)
现在你可以删除/ path/to/unrelated
Gre*_*ill 13
Github有一个名为Project Pages的功能,您可以在项目中创建一个特定的命名分支,以提供由Github提供的文件.他们的指示如下:
$ cd /path/to/fancypants
$ git symbolic-ref HEAD refs/heads/gh-pages
$ rm .git/index
$ git clean -fdx
Run Code Online (Sandbox Code Playgroud)
从那里你有一个空的存储库,然后你可以添加你的新内容.
unk*_*col 10
当前选择的答案是正确的,我只是巧合地添加...
这实际上就是github.com允许用户通过一个名为的孤立分支为他们的回购创建Github Pages的方式gh-pages.这里给出并解释了漂亮的步骤:
https://help.github.com/articles/creating-project-pages-manually
基本上用于设置它的git命令如下:
git checkout --orphan gh-pages (在你的repo上创建一个名为gh-pages的无父分支)git rm -rf . (从分支工作树中删除任何文件)rm '.gitignore' (即使是gitignore)请注意,您还可以在您的repo上指定/ docs文件夹作为Github用于构建网站的"项目站点"的来源.
希望这可以帮助!
在最近的 Git 版本中,至少 2.27,这可以使用以下switch命令干净地实现:
git switch --orphan <new-branch>
Run Code Online (Sandbox Code Playgroud)
官方文档:https : //www.git-scm.com/docs/git-switch
有时我只想立即在项目中创建空分支然后开始工作,我将执行以下命令:
git checkout --orphan unrelated.branch.name
git rm --cached -r .
echo "init unrelated branch" > README.md
git add README.md
git commit -m "init unrelated branch"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82839 次 |
| 最近记录: |