Git:"The branch you are about to push seems to be a new branch for the remote"警告



在我们的项目中,我们一直使用本地ip地址作为源地址。现在,我们已经转移到现场工作,需要使用远程ip进行推/拉。

使用manage remotes,选项我已将新ip保存为origin_remote,并试图将我的代码推送到那里,但由于某种原因,我得到了此警告(或信息消息)。我真的不确定我是否做错了什么。这个操作不应该很顺利吗,因为我只是改变了ip,把它推到同一个仓库?为什么git告诉我它是一个新的分支?

其他答案已经解释了为什么会发生这种情况,并解释了这不是Git的警告,而是GitExtensions的警告。

所以我会建议尝试来使消息消失。我在Git扩展2.48.05和Git版本1.9.5 msysgit的两个虚拟存储库上测试了它。在Windows 7上为0。(Stack Overflow现在不允许我添加截图)

  1. 从存储库中备份./git/config(以防万一)
  2. 删除所有[branch "..."][remote "..."]部分,并保存文件
  3. 在Git Extensions菜单中选择Repository -> Remote repositories...
  4. Name中放一些你喜欢的东西,例如,origin_remote
  5. Url中输入你想从
  6. 推送/拉取的URL
  7. Save changes
  8. 将弹出
  9. New remote对话框

    是否要自动配置此远程的默认推拉行为?

  10. Yes。这将自动添加远程分支引用并执行run git remote update。关闭对话框并刷新Git Extensions,以查看存储库图(Browse)视图中远程引用的状态。它们应该看起来像本地分支,但颜色为绿色,名称格式为origin_remote/your_branch_name

  11. 现在当你使用Push对话框在Remote字段选择origin_remote

最后,您应该在本地存储库的./git/config中得到如下内容:

[remote "origin_remote"]
    url = URL_TO_YOUR_REPOSITORY
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "your_branch_name"]
    remote = origin_remote
    merge = refs/heads/your_branch_name
[branch "your_other_branch_name"]
    remote = origin_remote
    merge = refs/heads/your_other_branch_name

这似乎只是一个Git扩展警告(即Git单独不会给你相同的警告)。

//Extra check if the branch is already known to the remote, give a warning when not.
//This is not possible when the remote is an URL, but this is ok since most users push to
//known remotes anyway.
if (TabControlTagBranch.SelectedTab == BranchTab && PushToRemote.Checked)
{
  //If the current branch is not the default push, and not known by the remote
  //(as far as we know since we are disconnected....)
  if (RemoteBranch.Text != GetDefaultPushRemote(_NO_TRANSLATE_Remotes.Text) &&
    !Module.GetHeads(true, true).Any(x => x.Remote == _NO_TRANSLATE_Remotes.Text && x.LocalName == RemoteBranch.Text) )
    //Ask if this is really what the user wants
    if (!Settings.DontConfirmPushNewBranch)
      if (MessageBox.Show(owner, _branchNewForRemote.Text, _pushCaption.Text, MessageBoxButtons.YesNo) ==
DialogResult.No)
      {
        return false;
      }
}

这取决于git扩展如何记录上游分支:

使用命令行git命令检查:

git config branch.master

查看branch.master.remote是否仍然指向旧的 ip地址而不是别名' origin ',而git remote -v确实显示了带有新ip地址的origin

如果,使用远程名称重新记录上游分支:

git config branch.master.remote origin

虽然VonC已经正确回答了,只是一些额外的细节:

Git Extensions只检查本地 config 文件,从而做出这个错误的、有问题的假设。

本地存储库可以有多个远程,但是对于 config 文件中的每个分支,它只能有一个branch部分,将分支映射到特定的远程(无论如何将分支映射到更多的远程是没有意义的,因为branch部分仅用于简化pushpull命令,允许您省略 remote branch 参数)。

在一个场景中(比如我们的场景),为一个存储库指定了多个远程,但是branch部分当然只映射到其中一个,每次尝试推送到这些次要远程时,都会出现此警告。如果你已经习惯了,那还好,但对于那些第一次看到它的人来说,它就会成为问题,因为它会立即给人一种应该避免的错误即将发生的想法。

消息本身令人困惑。它的放置方式给人的感觉是,Git Extensions实际上已经连接到远程存储库,检查了它,发现那里不存在分支。但事实并非如此,分支已经存在于远程存储库的 /refs 中。Git Extensions只检查了本地 config 文件,因此该消息提供了错误信息。

正常情况下,Git Extensions应该在显示这样的消息之前连接到远程存储库,但即使在这种情况下,推送一个新的分支也没有什么错,就像push也可以删除远程存储库中的分支一样,在这种情况下,由于Git Extensions只检查本地的 config 文件,你可能根本不会得到警告,尽管它比添加一个更危险

相关内容

最新更新