为什么我的'git branch'没有主人?

时间:2010-09-02 04:08:39

标签: git

我是一个git新手,我一直在阅读一个“主”分支。 “master”只是人们使用的常规名称,还是具有HEAD等特殊含义?

当我对我所拥有的克隆进行git branch时,我只看到一个单独的分支 - 我正在使用的那个分支。根本没有“主人”。如果我输入git checkout master(正如我在很多教程或指南中看到的那样),我得到了

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

我很困惑为什么我的克隆没有master,每个人似乎都暗示它总是存在。

10 个答案:

答案 0 :(得分:79)

要签出本地不存在但位于远程仓库中的分支,您可以使用此命令:

git checkout -t -b master origin/master

答案 1 :(得分:65)

大多数Git存储库使用master作为主要(和默认)分支 - 如果您通过git init初始化新的Git存储库,则默认情况下会master签出。

但是,如果您克隆存储库,则您拥有的默认分支是远程HEAD指向的任何分支(HEAD实际上是指向分支的符号引用名称)。因此,如果您克隆的存储库指向HEAD,例如foo,那么您的克隆将只有一个foo分支。

您克隆的远程可能仍然有master分支(您可以使用git ls-remote origin master进行检查),但默认情况下您不会创建该分支的本地版本,因为{{1只检查远程的git clone

答案 2 :(得分:37)

master只是一个分支的名称,除了在创建新的存储库时默认创建它,它没有什么神奇之处。

您可以使用git checkout -b master添加回来。

答案 3 :(得分:21)

我实际上遇到了与全新存储库相同的问题。我甚至尝试使用git checkout -b master创建一个,但它不会创建分支。然后我意识到如果我做了一些更改并提交了它们,git创建了我的主分支。

答案 4 :(得分:13)

在我的情况下,有一个 develop 分支但没有 master 分支。因此,我克隆了将新创建的HEAD指向现有分支的存储库。然后我创建了缺少的分支并更新HEAD以指向新的主分支。

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

答案 5 :(得分:12)

如果它是你克隆的新回购,它可能仍然是空的,在这种情况下:

git push -u origin master

应该可以解决它。

(在我的情况下做了。不确定这是同一个问题,我想我应该发布这个问题。可能会帮助其他人。)

答案 6 :(得分:7)

我遇到了同样的问题并找出了问题所在。初始化存储库时,实际上没有任何分支。当您启动项目时,运行public class ConwayGame { static JPanel panel; static JFrame frame; public static void main(String[] args) throws InterruptedException{ int [][] array = new int [40][40]; /* * Set the pattern for Conway's Game of Life by manipulating the array below. */ /*Acorn */ array[19][15]=1; array[19][16]=1; array[19][19]=1; array[19][20]=1; array[19][21]=1; array[18][18]=1; array[17][16]=1; panel = new JPanel(); Dimension dim = new Dimension(400, 400); panel.setPreferredSize(dim); frame = new JFrame(); frame.setSize(400,400 ); Container contentPane = frame.getContentPane(); contentPane.add(panel); frame.setVisible(true); /* * Runs the Game of Life simulation "a" number of times. */ Graphics g = panel.getGraphics(); drawArray(array, g); //paint(g); //Thread.sleep(125); //g.dispose(); } /* * Creates the graphic for Conway's game of life. */ public static void drawArray(int[][] array, Graphics g) { int BOX_DIM = 10; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[0].length; j++) { g.drawRect(i * BOX_DIM, j * BOX_DIM, 10, 10); if (array[i][j] == 0) { g.setColor(Color.WHITE); g.fillRect(i * BOX_DIM, j * BOX_DIM, 10, 10); } if (array[i][j] == 1) { g.setColor(Color.BLACK); g.fillRect(i * BOX_DIM, j * BOX_DIM, 10, 10); } } } } } 然后git add .,将创建主分支。

没有检查任何内容你没有主分支。在这种情况下,您需要按照此处其他人建议的步骤进行操作。

答案 7 :(得分:0)

主分支上似乎必须至少有一个本地提交才能执行:

git push -u origin master

因此,如果您执行了git init .然后git remote add origin ...,则仍需执行以下操作:

git add ...
git commit -m "..."

答案 8 :(得分:0)

如果您从Github Web GUI创建新的存储库,有时会得到名称“ main”而不是“ master”。通过在终端上使用命令git status,您将看到自己所在的位置。在某些情况下,您会看到origin/main

如果您尝试通过CLI将应用程序推送到云服务,请使用“ main”,而不是“ master”。

示例: git push heroku main

答案 9 :(得分:0)

我遇到了同样的问题。我执行了“git init”,但没有创建主/主分支。可能是因为我使用了另一个名称的分支,而这个分支成为默认值。 对我有用的解决方案是:

  1. 我创建了分支“main”

git checkout -b main

  1. 我转到目录的选项 Settings->Branches 并将其更改为新分支“main” enter image description here

  2. 通过此更改,Github 本身通知我我的默认分支 (main) 位于我的另一个分支之后,并为我打开了窗口以确认 PR 将更改应用于分支 main。在此之后,合并拉取请求。 enter image description here