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

x7rlezfr  于 2022-09-21  发布在  Git
关注(0)|答案(6)|浏览(259)

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

在服务器上,我使用了以下命令

git remote set-url origin bitbucket_address

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

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

是什么导致了这一问题,我如何修复它?

vuv7lop3

vuv7lop31#

看起来您已经使用git clone --depth <number>克隆了您的本地版本。这导致了一个“浅层克隆”。这种克隆的一个限制是您不能将其推送到存储库中。

您现在有两个选择:

1.如果你不在乎你丢失的历史,看看this question
1.如果你想保留你的全部历史,那么继续阅读:

所以,你想保留你的历史,是吗?这意味着您必须对您的存储库进行“浅显”。为此,您需要重新添加旧遥控器。

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

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

git fetch --unshallow old

现在,您应该能够推送到新的远程存储库中。

注意:在去剥离你的克隆之后,你显然可以再次移除旧的遥控器。

d8tt03nd

d8tt03nd2#

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

git fetch --unshallow upstream
5hcedyr0

5hcedyr03#

如果您想将repo与您在浅层初始提交后添加的新提交保持原样,则另一个选项是:使用交互式rebase修改此提交

  • 启动包括第一次(根)提交的交互式重新建立基础
git rebase --interactive --root
  • 将初始提交的pick更改为edit并保存并关闭文件。

如果您克隆了深度大于1的repo,则可能需要对所有这些提交执行相同的操作。或者,可替换地,在交互重新基址期间对所有这些执行fixup

  • 将此提交转换为常规的、不浅的提交
git commit --amend --no-edit

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

  • 别忘了完成你的改垒
git rebase --continue
eqqqjvef

eqqqjvef4#

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

  • 首先从当前回购中删除old git foldersudo rm -rf .git
  • 然后再次初始化GIT git init
  • 然后添加新的远程回购git remote add origin your-new-repo
  • 那就推吧。
lyfkaqu1

lyfkaqu15#

如果取回--不浅不起作用。你们的分公司一定是出了什么问题。在按下它之前,使用以下命令修复它。

git filter-branch -- --all

只有在--不浅的情况下才能做到这一点,因为存在安全问题。

m4pnthwp

m4pnthwp6#

我修复了这个问题。但也许你无法修复它。解决方案如下。

1.从git中获取浅层文件,如Common/.git/shlow
1.将此文件推送到git服务器中的.git目录。
1.将您的分支推送到git服务器。

在我的公司,我需要IT管理员添加文件,但我没有权限。

相关问题