在本地和服务器上处理多个Git Head

Len*_*onR 3 git branch head linode

我正在使用Linonde来托管我的git repos以及实际的站点文件.

git branch -r看起来像这样:

company/master
company/stage
origin/HEAD -> origin/master
origin/master
prod/master
Run Code Online (Sandbox Code Playgroud)

git branch看起来像这样:

master
stage
Run Code Online (Sandbox Code Playgroud)

我想我只是想让我的本地舞台分支指向我的公司/主人.当我这样做git push company stage它似乎更新我的服务器上的舞台头,但我想让它更新主头,这是我的网站似乎服务它的文件来自.或者我需要弄清楚如何将我的网站指向公司/舞台主管.

我试着删除我的分支并制作一个

git branch stage company/master
Run Code Online (Sandbox Code Playgroud)

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

在我尝试推送之后,我得到消息:

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.)
Run Code Online (Sandbox Code Playgroud)

我试了一下,git pull但它说一切都是最新的,我在快进的帮助文档中找不到任何解决我的情况的东西.

Mar*_*air 6

首先,值得解释当你这样做时会发生什么:

git push company stage
Run Code Online (Sandbox Code Playgroud)

最后一个参数是一个真正的refspec,它定义了源ref和目标ref之间的映射 - 在你可能正在处理的简单情况下,这些"refs"是分支名称.如果:refspec中没有,那么假设您想要推送到同名的分支.所以,你运行的命令相当于:

git push company stage:stage
Run Code Online (Sandbox Code Playgroud)

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

git push company stage:master
Run Code Online (Sandbox Code Playgroud)

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

git branch stage company/master
Run Code Online (Sandbox Code Playgroud)

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

不幸的是(并且令人困惑)这些配置选项(默认情况下)不影响git push在其他地方详细描述的行为.你没有提到git push你当时使用的命令的形式,但你应该这样做:

git push company stage:master
Run Code Online (Sandbox Code Playgroud)

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


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