更改Git远程URL后远程拒绝(不允许浅更新)

时间:2015-03-11 10:16:23

标签: git

我在Git版本控制下有一个项目,我在服务器和本地计算机上工作。我最初将远程原点设置为我的本地计算机,但我现在想将其更改为BitBucket。

在服务器上我使用了命令

git remote set-url origin bitbucket_address

但是现在当我尝试推动我的项目时,我得到了错误

 ! [remote rejected] master -> master (shallow update not allowed)

导致此问题的原因以及如何解决?

6 个答案:

答案 0 :(得分:260)

您似乎已使用git clone --depth <number>克隆本地版本。这导致浅克隆。此类克隆的一个限制是您无法将其推送到存储库。

您现在有两个选择:

  1. 如果您不关心当前或缺少历史记录,请查看this question
  2. 如果您想保留完整的历史记录,请继续阅读:
  3. 所以,你想保留你的历史,嗯?这意味着您必须 unshallow 您的存储库。为此,您需要再次添加旧遥控器。

    git remote add old <path-to-old-remote>
    

    之后我们使用git fetch从旧遥控器中获取剩余的历史记录(如this answer中所述)。

    git fetch --unshallow old
    

    现在您应该能够进入新的远程存储库。


    注意取消克隆之后,您显然可以再次移除旧遥控器。

答案 1 :(得分:15)

如果您的回购是origin,原始回购是upstream

git fetch --unshallow upstream

答案 2 :(得分:7)

如果您想按原样推送新回购,可以试试这个:

  • 首先从您当前的仓库old git folder
  • 中删除sudo rm -rf .git
  • 然后再次初始化git git init
  • 然后添加新的远程仓库 git remote add your-new-repo
  • 然后推它。

答案 3 :(得分:5)

如果您希望将存储库与添加的新提交保持不变,那么另一个选择是:使用交互式rebase修改此提交

  • 启动一个交互式基础,包括使用以下命令进行的第一次(根)提交

    git rebase --interactive --root
    
  • 将初始提交的pick更改为edit,然后保存并关闭文件。

  • 使用

    将此提交转换为常规的,浅表的提交
    git commit --amend --no-edit
    

这还将更改提交ID,并将您作为共同作者添加到此初始提交中。

如果克隆的存储库的深度大于1,则可能需要对所有这些提交执行相同的操作。或者,也可以在交互式变基期间对所有这些命令执行fixup

答案 4 :(得分:1)

如果获取--unshallow不起作用。您的分支机构一定存在一些问题。在推入之前,请使用以下命令对其进行修复。

git filter-branch -- --all

仅在--unshallow上执行此操作无效,因为存在SAFETY顾虑。

答案 5 :(得分:0)

基于最受好评的答案,我创建了一个别名来自动执行操作:

添加到您的.gitconfig

[alias]
    unshallow = !"git fetch --unshallow \"${1:-origin}\" # Unshallow from remote $1 (defaults to origin)"

用法:

  • git unshallow#根据origin遥控器取消当前分支
  • git unshallow other-remote#取消远程other-remote的当前分支
相关问题