如何在Git的裸仓库中创建一个分支

25

我目前有一个裸仓库,用作我的团队的中央仓库。该裸仓库目前只有一个名为 "master" 的分支。如何在裸仓库上创建更多分支?

3个回答

23

通常情况下,您不会直接在裸仓库中创建分支,而是从工作仓库将分支推送到裸仓库。

git push origin myBranch

更新:值得一提的是

正如Paul Pladijs在评论中提到的那样

git push origin localBranchName:remoteBranchName

你可以使用不同于本地分支名称的名称将本地分支推送(并在不存在时创建)到远程分支。为了完成这个过程,

git push origin :remoteBranchName

你删除了一个远程分支。


1
如果你想给分支取另一个名字,那么请使用:git push origin localBranchName:remoteBranchName - Paul Pladijs
2
这是什么胡言乱语?那个人问了一个简单的问题:“如何在裸库中创建分支?”当然,任何建议都可能受到欢迎,但请在回答问题之后再提出。有人问过你通常会发生什么吗?也许他是经理,没有或不想要一个已检出的工作树。正确的答案是@arcyqwerty的答案(git branch branchname)。请将其标记为已接受。 - Poniros
嗨@Yannis。不,问题确实是“如何在裸仓库中创建分支”,但您绝对不能直接在裸仓库中创建分支。真的。从来没有。arcyqwerty实际上告诉你同样的事情,因为相关部分是“git push...”。也就是说,这是在裸仓库中“创建”分支的方法。他的“git branch…”是本地的。 - KingCrunch
1
@KingCrunch :是的,但你明白你的答案只涉及“如何正确做”,而没有回答“如何做”,我认为回答中这点是必须的。例如,在我的情况下,我在公司垃圾版本控制系统上使用git,我经常在裸仓库上直接管理分支(因此并不像你说的从来没有)。我正在寻找这个答案(当时我在工作中非常沮丧,因此评论有些激进),只有arcyqwerty的回复给了我这个答案。真正的答案 > 建议 - Poniros

14
git update-ref refs/heads/new_branch refs/heads/master

如果您可以直接访问裸库,则可以在最后一个参数中提供任何引用(例如标签)或提交。

以下是一个测试脚本:

$ mkdir non-bare-orig

$ cd non-bare-orig/

$ git init
Initialized empty Git repository in D:/Temp/bare-branch/non-bare-orig/.git/

$ touch file1

$ git add --all && git commit -m"Initial commit"
[master (root-commit) 9c33a5a] Initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1

$ touch file2

$ git add --all && git commit -m"Second commit"
[master 1f5673a] Second commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2

$ git tag some_tag

$ touch file3

$ git add --all && git commit -m"Third commit"
[master 5bed6e7] Third commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file3

$ cd ../

$ git clone --bare non-bare-orig bare-clone
Cloning into bare repository 'bare-clone'...
done.

$ cd bare-clone/

$ git update-ref refs/heads/branch1 refs/heads/master

$ git update-ref refs/heads/branch2 some_tag

$ git update-ref refs/heads/branch3 9c33a5a

$ git branch -vv
  branch1 5bed6e7 Third commit
  branch2 1f5673a Second commit
  branch3 9c33a5a Initial commit
* master  5bed6e7 Third commit

5
创建一个名为branchname的新分支(本地)。
git branch branchname

接下来,如果适用的话,将其与远程仓库(如GitHub)同步。

git push origin branchname

使用它进行开发/将该分支设为活动分支

git checkout branchname

6
在一个裸仓库中,这会导致出现错误:fatal: not a valid object name: 'master'. - Ed Randall

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