3

我正在使用 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,但它说一切都是最新的,我在快进帮助文档中看不到任何解决我的情况的东西。

4

1 回答 1

6

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

git push company stage

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

git push company stage:stage

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

git push company stage:master

继续,当您删除分支并使用以下命令重新创建它时:

git branch stage company/master

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

不幸的是(并且令人困惑)这些配置选项(默认情况下)不会影响 的行为git push,我在其他地方详细写过。你没有提到git push你然后使用的命令的形式,但你应该一直在做:

git push company stage:master

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


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

于 2011-08-21T17:00:56.613 回答