【问题标题】:How can I choose to overwrite remote repository with local commits?如何选择使用本地提交覆盖远程存储库?
【发布时间】:2011-12-05 14:41:34
【问题描述】:

基本上,由于我无法控制的事件,我的远程仓库被移动了 - 同时我在本地副本上做了很多工作,现在我真的只想用我的本地文件覆盖远程仓库中的所有内容。

但是,我似乎无法做到这一点。我能得到的最接近的是拉和合并,但它想引导我完成一些复杂的合并过程。我不想合并。我想覆盖。我不需要新的分支 - 基本上,我只想要一个新的开始。

远程 repo 正在进行中。

【问题讨论】:

标签: git unfuddle


【解决方案1】:

您可以删除分支并重新创建它,假设您要覆盖的分支是dev

删除远程主机(github)中的分支

git push origin :dev  

然后再次推送您的开发:

git push origin dev

我使用 Github 进行托管,不熟悉 unfuddle,但我认为它也适用于 unfuddle。 :)


正如@melee 提到的,你也可以使用

git push origin dev -f

(不确定-f是否有效,但--force可以)

git push origin dev --force

强制覆盖分支。我记得我以前做过。谢谢@melee。 :)

【讨论】:

  • 我认为(我在这里不确定)你可以通过 git push origin dev -f 获得相同的结果
  • 最后,我本身并没有使用 git 命令解决这个问题。相反,我只是将我的本地文件复制到一个临时目录,然后删除了我的本地文件。然后将过时的文件从远程仓库“拉”到现在空的本地文件夹中。然后我从临时目录中复制了那些过时的文件,进行了提交,然后推送回了 repo。这至少解决了我眼前的问题,现在我回到了本地和远程仓库同步的轨道上。
  • @ericgr 您应该将其添加为答案!
  • ^ 除非你丢失了所有 git 历史记录,这肯定不理想。
  • -f--force 是同义词。
【解决方案2】:

遇到同样的问题。这个命令对我有用。

git push --set-upstream origin master --force

【讨论】:

    【解决方案3】:

    如何在不从远程仓库拉取数据的情况下为 master 分支执行此操作:

    1. 创建一个新文件夹,初始化 git,添加远程仓库 - 不要拉取或获取!

      mkdir clean_repo

      git init

      git remote add origin <remote-repo>

    2. 创建(并切换到)空的本地分支,添加、提交并将测试文件推送到这里。

      git checkout test

      echo "test" > test

      git add .

      git commit -m "adding test"

      git push origin:test

    3. 在 github/bitbucket 上,将默认分支更改为新分支

    4. 在本地,切换到主分支,提交并推送到远程仓库/分支

      git checkout -b master

      git push origin --mirror

    【讨论】:

      【解决方案4】:

      我不是 github 生态系统的专家,但为什么不能重置远程存储库 url?

      git remote set-url origin /path/to/your/new/remote/repository/url
      

      您可能还需要通过查看here 来配置您的上游分支。

      有关git remote...的更多信息,请查看here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-11
        • 1970-01-01
        • 2011-09-12
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        相关资源
        最近更新 更多