你在一个尚未诞生的分支上。

63

我有一个奇怪的问题:

$ cd ~/htdocs

$ mkdir test

$ cd test

$ git init
Initialized empty Git repository in /home/deep/htdocs/test/.git/

$ git checkout master
error: pathspec 'master' did not match any file(s) known to git.

$ git checkout -b master
fatal: You are on a branch yet to be born

$ git checkout origin/master
error: pathspec 'origin/master' did not match any file(s) known to git.

$ git branch -a
(empty this)

但这是一个新的本地空仓库。主分支在哪里?


请点击此处查看:https://help.github.com/articles/create-a-repo - Haifeng Zhang
请参见 https://dev59.com/NnA65IYBdhLWcg3wzyBl - DNA
我不小心在父文件夹上运行了npm version patch,我认为这就是导致所有项目出现问题的原因。 - Scott Morrison
9个回答

45

一如既往,Git 是正确的,只是它有一种古怪的说法:当你创建一个存储库时,主分支实际上尚不存在,因为没有任何内容可让其指向。

在运行git init之后是否尝试过提交一些内容?当然,添加远程并从中拉取也可以工作。


1
我添加了一个远程并从中拉取,但仍然遇到此错误。只需快速添加 . / 提交,我就能进入分支。 - Tim Roberts
但是如果我不想从主分支拉取任何东西呢? - Cocuba
@Cocuba 我认为你不必从主分支pull,当你刚初始化你的git仓库时,你应该先进行第一次提交以创建一个分支,然后才能checkout,因为分支还没有被创建。 - MichaelMao

8

我曾经遇到了和你一样的问题。我解决的方法是创建一个新的空文件,只是为了在项目中有一个文件。

git add someFile 然后 commit -m "first commit" 最后用 push origin master

希望这可以帮到你。


6

如果有人看到这部分内容,我想你在前面的答案中并没有得到帮助。我和提问者遇到了相同的问题。请尝试以下方法:

  1. 在另一个目录中克隆您的存储库
  2. 将 .git 文件夹复制到新的存储库中

4
这是因为您正在上传具有main作为其默认分支的git存储库。但在裸仓库中,默认分支是master。要轻松解决此问题,请删除基础存储库。 运行以下命令。
git config --global init.defaultBranch main 然后使用以下命令再次创建裸仓库。
git init --bare

3
有一种方法可以初始化一个新的存储库,而不实际提交任何文件:
git commit --allow-empty -m "Initialization"

如果你碰巧有一个 --bare 的仓库,那么解决方法如下:

mkdir /tmp/empty_directory
git --work-tree=/tmp/empty_directory checkout --orphan master
git --work-tree=/tmp/empty_directory commit --allow-empty -m "Initialization"
rm -rf /tmp/empty_directory

这对我有用,但需要额外的步骤,强制更新新的“master”分支到我最初想要的状态(在我的情况下,通过从另一个具有新仓库作为远程的仓库进行git push -f)。这个步骤放弃了形式上的提交,但我一开始就不想要它,所以无所谓。 - BCS

2

这是因为您的意愿所致

git init

在存放 .gitignore 文件的根目录下,创建一个子文件夹并在其中进行尝试。


1
尝试在结尾添加分支。
#!/bin/bash
TARGET="/home/user/repo"
GIT_DIR="/home/user/www.git"
BRANCH="master"
while read oldrev newrev ref
do
 # only checking out the master (or whatever branch you would like to deploy)
 if [ "$ref" = "refs/heads/$BRANCH" ];
 then
  echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
  git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
 else
  
  # perform more tasks like migrate and run test, the output of these commands will be shown on the push screen
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
 fi
done

0

我也和原帖作者遇到了同样的问题。最开始,我做了以下的事情:

md Project
cd Project
git init
git remote add origin git@domain.com:user/repo.git

所有随后的git命令都有和原帖相同的错误。

对我有效的方法是删除项目文件夹,然后从父文件夹中执行以下命令:

git clone http[s]://domain.com/user/repo.git Project

然后它提示我输入用户名和密码以访问仓库。每个git命令都要求输入凭据,因此我运行了以下命令:

git config --global credential.helper wincred

下一个git命令要求我的凭据,然后这些凭据被存储在Windows凭据管理器中(通过控制面板可见)。现在,git命令可以在不提示凭据的情况下工作。

0

当我打开多个Windows资源管理器并且都打开到同一个本地git仓库时,我遇到了相同的错误信息。

我在其中一个窗口中使用右键单击-->创建分支来创建一个新分支。

后来,在第二个Windows资源管理器实例中,我尝试右键单击-->分支(以查找当前检出的分支)。然后我收到了消息“您正在一个尚未诞生的分支上”。

简单地关闭第二个资源管理器即可解决问题,并且错误不会在第一个资源管理器中显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接