【问题标题】:Dealing With Multiple Git Heads locally and on the server在本地和服务器上处理多个 Git Head
【发布时间】:2011-10-31 15:50:35
【问题描述】:

我正在使用 Linonde 来托管我的 git 存储库以及实际的站点文件。

git branch -r 看起来像这样:

company/master
company/stage
origin/HEAD -> origin/master
origin/master
prod/master

git 分支如下所示:

master
stage

我想我只是想让我的本地舞台分支指向我的公司/主管。当我执行git push company stage 时,它似乎更新了服务器上的舞台头,但我试图让它更新主头,我的网站似乎从中提供文件。或者我需要弄清楚如何将我的网站指向公司/舞台负责人。

我尝试删除我的分支并与

git branch stage company/master

因为我认为起点可能是我所需要的。

当我尝试推送时,我收到消息:

error: failed to push some refs to 'root@foo:~repos/project_name'
To Prevent you from losing history, non-fasst-forward updates were rejected
Merge the remote changes (e.g. 'git    pull') before pushing again.)

我尝试了git pull,但它说一切都是最新的,我在解决我的情况的快进帮助文档中看不到任何内容。

【问题讨论】:

    标签: git branch head linode


    【解决方案1】:

    首先,有必要解释一下当你这样做时会发生什么:

    git push company stage
    

    最后一个参数是一个真正的refspec,它定义了源引用和目标引用之间的映射——在您可能要处理的简单情况下,这些“引用”是分支名称。如果 refspec 中没有 :,则假定您要推送到同名的分支。因此,您运行的命令相当于:

    git push company stage:stage
    

    如果您想更新 company 存储库中的 master 分支,则需要执行以下操作:

    git push company stage:master
    

    继续,当您删除分支并重新创建它时:

    git branch stage company/master
    

    ... 在您的 git 配置中创建条目,将您的本地分支 stage 与存储库 company 中的分支 master 相关联。 ¹这意味着如果您在分支stage 上,运行git pull 应该做正确的事情,在这种情况下是更新远程跟踪分支company/master,并将其合并到stage

    不幸的是(并且令人困惑)这些配置选项不会(默认情况下)影响git push 的行为,我wrote about in some detail elsewhere。你没有提到你当时使用的git push 命令的形式,但你应该一直这样做:

    git push company stage:master
    

    ...如果您想使用本地 stage 分支更新 company 存储库中的 master 分支。 (如果您只是尝试git push company,它将尝试在本地存储库和company 之间推送每个“匹配”分支,其中“匹配”表示“本地和远程存在同名分支”。您可以更改此设置通过将 push.default 配置选项设置为 tracking 来行为。)


    ¹在早期版本的 git 中,您必须添加 --track 参数,但有一段时间,这是默认的,起点是远程跟踪分支。

    【讨论】:

    • +1 不错的答案马克。当我看到这个时,我正在发布答案。我更喜欢你的回答,所以我什至懒得继续。 :)
    • 虽然您可能想在 eschaton 上进行搜索和替换
    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 2017-05-01
    • 2014-09-30
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多