如何在Git中创建没有父项的提交?

use*_*855 77 git

可能重复:
在git中,有一种简单的方法可以将不相关的分支引入存储库吗?

我有一个小项目,我工作,没有任何形式的版本控制软件,和我结束了三个不同版本的同一个脚本,在那里每个人做了从别人略有不同.我用其中一个版本初始化了一个git repo,我真的很愿意在没有父母的情况下让其他两个版本中的每个版本.这样,我可以合并差异,就好像脚本的三个版本中的每一个都是不同分支的提示一样.

我甚至不能确定这是否是一定要着手解决这个问题,一个理智的或合理的方式......如何在一个更好的方式来处理这种情况这样做事,或者建议任何意见,将不胜感激.

man*_*lds 135

从我的评论:

为什么不创建两个分支并将其他两个版本添加到它们然后在分支上工作?

我认为这也与ctcherry的答案一致.


但是如果你真的想要创建一个与master无关的完全不同的"分支",那么你可以用它来完成git checkout --orphan.在手动git checkout描述了选项的工作--orphan:

创建一个名为<new_branch> 的新孤立分支,从<start_point>启动并切换到它.在这个新分支上进行的第一次提交将没有父项,它将成为与所有其他分支和提交完全断开的新历史的根.

您可以像这样使用它:

git checkout --orphan version2
git rm -rf .
<add version2 script>
git add your files
git commit -m 'Initial commit for version 2'
Run Code Online (Sandbox Code Playgroud)

如果您的Git早于1.7.2(git checkout --orphan引入时),那么您可以使用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)

  • +1解释为什么OP可能想要重新考虑他们的策略,但无论如何回答这个问题,而不是说"你的方法是错的"并将其留在那里. (17认同)
  • +1提及`git checkout --orphan` - 即使我的git 1.7.1还不支持这个.但看起来[Ubuntu 11.04将包含git 1.7.4](http://packages.ubuntu.com/natty/git),所以我只需要等待两周以上. (6认同)