我有一个裸存储库,用作我项目的中央存储.所有开发人员都git clone <repo>愿意与之分享.当他们进行克隆时,他们会检查主分支(除非他们这样做git clone -n)因为repo.git/HEAD包含ref: refs/heads/master,使其成为活动分支.
问题是,如何正确更改活动分支?我可以简单地直接破解repo.git/HEAD文件,但这看起来很讨厌,而且,哈哈.
我尝试git checkout <otherbranch>在repo .git目录中做,但是因为我不在工作树中而失败了.
我试过git update-ref HEAD refs/heads/otherbranch但是刚刚更新的refs/heads/master与refs/heads/otherbranch相同(好吧,我在虚拟存储库中做了那个,而不是我的生产!)
我试过git update-ref --no-deref HEAD refs/heads/otherbranch,这几乎奏效了.它更新了HEAD文件,但它将其设置为指向的提交的SHA1 refs/heads/otherbranch.
我正在使用git版本进行测试1.7.0.2.msysgit.0.
我猜测没有办法做到这一点git push,因为允许所有和各种更改你的默认分支似乎有点不安全(!),但肯定有一个更好的方法在repo .git目录中执行它比直接黑客HEAD文件.
当你运行git branch -r为什么火焰会列出origin/HEAD?例如,GitHub上有一个远程仓库,比如说有两个分支:master和awesome-feature.如果我git clone抓住它然后进入我的新目录并列出分支,我看到:
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
Run Code Online (Sandbox Code Playgroud)
或者它的任何顺序(阿尔法?我正在伪造这个例子以保持无辜的回购秘密的身份).那么HEAD业务是什么?它是什么,最后一个人push有他们HEAD在尖时,他们推?这不会是他们push编辑的一切吗?HEAD四处走动......为什么我会关心别人HEAD在另一台机器上指出的东西?
我只是处理远程跟踪等问题,所以这是一个挥之不去的混乱.谢谢!
编辑:我的印象是专用的远程回购(比如GitHub,没有人会在这个代码上工作,但只有拉或推等)没有也不应该有HEAD,因为基本上,没有工作副本.不是吗?
我有一个分支设置来跟踪ref in origin. git checkout <branchname>切换到那个分支,一个git status将显示我的分支从原点到前方或后方的距离,但我origin/HEAD仍然感到惊讶,仍然指向origin/master,而不是origin/<branchname>
所以我的问题是,在什么情况下起源/ HEAD会被移动?
编辑:
我很欣赏有关如何移动origin/HEAD 的答案,但我对"有机"移动它感兴趣,除了明确告诉它这样做之外.
例如,当我切换分支时,git使HEAD指向我正在检出的分支,所以我很惊讶origin/HEAD不会以相同的方式移动.
如何将Git遥控器的HEAD引用设置为指向除"master"之外的其他内容?
我的项目有一个不使用"主"分支的策略(所有分支都有有意义的名称).此外,规范主存储库只能通过ssh://访问,没有shell访问权限(如GitHub或Unfuddle).
我的问题是远程存储库仍然有一个HEAD引用refs/heads/master,但我需要它指向一个不同的分支.这导致两个问题:
克隆回购时,有这个,
警告:远程HEAD是指不存在的ref,无法结帐.
这令人困惑和不方便.
基于Web的代码浏览器依赖于HEAD作为浏览树的基础.我需要HEAD指向一个有效的分支,然后.
我过去git diff origin经常使用.
在不同的环境中,它不起作用.我不知道为什么.
user@host> git diff origin
fatal: ambiguous argument 'origin': unknown revision or path
not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Run Code Online (Sandbox Code Playgroud)
状态:
user@host> git status
On branch master
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
遥控器:
user@host> git remote -v
origin https://example.com/repos/djangotools (fetch)
origin https://example.com/repos/djangotools (push)
Run Code Online (Sandbox Code Playgroud)
版:
user@host> git --version
git version 2.7.4
Run Code Online (Sandbox Code Playgroud)
用"git版本1.8.1.4" git diff origin工作.
顺便说一句,如果我使用"git diff origin/master",我会看到相同的错误信息
BTW2,我认为"/ master"是多余的.理所当然的默认设置是将本地分支与远程站点上的同一分支进行比较.
当我自己工作时,不了解 git 的基础知识是可以的,但是现在我正在和另一个人一起工作,并且我们每个人都提交拉取请求以让他们合并,这开始成为一个问题。
工作流程:我写在我的“作者”分支。当准备好进行审查时,我提交了一个拉取请求,我的编辑器将其合并到 master 中。当她对我有意见时,她提交了她的 Editor 分支的 pull request,我将它们合并到 master 中。
今天,我收到了一个完全令人恼火的循环错误,我不明白我被要求做什么。
thomas@trigger ‹ author ?? › : ~/pm/wip
[1] % git push
To https://github.com/mathpunk/punk-mathematics-text.git
! [rejected] Editor -> Editor (non-fast-forward)
! [rejected] author -> author (non-fast-forward)
error: failed to push some refs to 'https://github.com/mathpunk/punk-mathematics-text.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
所以,我尝试 git …
假设远程br1仓库上有远程分支机构检查,master本地仓库上有分支机构.
命令1:如果我做了一个" git pull origin br1:br1"它将远程拉br1入本地br1,并显示:
9188a5d..97d4825 br1 -> br1
9188a5d..97d4825 br1 -> origin/br1
命令2:如果我只做一个" git pull",它会将远程拉br1入本地master,但它只显示以下内容:
9188a5d..97d4825 br1 -> origin/br1
我期待它也会显示" br1 -> master" 这样的东西.为什么没有表现出来?
" br1 -> br1" 是否意味着将远程拉br1入本地br1?
这是什么br1 -> origin/br1意思?
更新:在VonC的帮助下,我发现了以下内容:
git pull更新所有跟踪分支.遥控器上的br1 -> origin/br1装置br1被拉入本地跟踪分支origin/br1.
git pull origin br1:br1将远程拉br1入本地br1并进入origin/br1.然后,之后的消息意味着相同的更改集也被拉入当前签出的分支(消息是 …
根据一些研究,我发现 git 在两个地方保留了两个版本的代码:
.git/refs/heads (本地存储库) .git/refs/remotes/ (工作目录)首先,我的理解可以吗?
然后我需要知道两者head并working directory指的是哪个分支。有两个命令:
cat .git/head
git branch
你能告诉我这两个命令指的是哪一个吗?(在 中的分支head或在 中的分支working directory)?
当您运行时git status,您的更改是否会与head或 中的版本进行比较working directory?