假设我要在3个不同的文件(fileA,fileB和fileC)中为我的新项目实现3个不同的功能。
我以为我只需要将我的(当前为空)项目添加到git:
git init
然后创建3个不同的分支:
git branch file1_branch
git branch file2_branch
git branch file3_branch
但这不起作用:
致命:不是有效的对象名称:'master'。
为什么会这样?
也许问题可能与此时甚至没有创建主分支有关?我试过做git branch
。它没有任何收获。
然后我考虑做一个“空”提交来强制git创建master
分支:
git commit -m `initial_commit`
但由于我没有将任何文件添加到暂存区域,因此无效。
请记住,我即将开始我的项目,所以此时我没有任何文件可以添加到提交中!
如何解决这个问题?我做错了吗?
由于
答案 0 :(得分:89)
Git将分支表示为该分支中最新提交的指针。如果您尚未创建提交,则该分支无需指向。所以在你至少有一次提交之前,你无法真正创建分支。
Git表示提交作为对一个或多个父提交的引用(如果这是初始提交,则为全零父级),提交消息和一些其他元数据以及树引用。树基本上是每个目录中每个文件中的内容的清单。如果您的目录为空,则无法在树中放置任何内容。现在,实际上可以创建一个空提交作为第一次提交;你可以运行git commit --allow-empty -m "initial commit"
。但这并不是使用Git的常用方式。
在Git中,除非你需要,否则你不应该使用分支。在有一些要分支的内容之前,不需要创建多个分支。如果你在开发的最初阶段创建了三个分支,那么它们之间是否会有共同的祖先?在那种情况下,为什么不创建三个回购?或者你是否会同步更新它们中的所有三个,直到它们开始分歧?这似乎是为了让所有这些都保持最新的额外工作;你应该等到创造它们,直到它们需要发散。
但是如果要使用此工作流,可以运行git commit --allow-empty -m "initial commit"
来创建一个空的初始提交。
答案 1 :(得分:13)
您可以使用以下命令执行空初始提交:
git commit --allow-empty
然后你可以随意创建你的分支。
答案 2 :(得分:0)
我总是通过提交一个空文件来初始化分支:
touch a
git add a
git commit -m'init'
然后它会自动创建分支“ master”。 之后,您可以删除文件“ a”。
答案 3 :(得分:0)