如何选择使用本地提交覆盖远程存储库?

eri*_*cgr 36 git unfuddle

基本上,由于我无法控制的事件,我的远程仓库被移动了 - 在此期间我在我的本地副本上做了很多工作,现在我真的只想用我的本地文件覆盖远程仓库中的所有东西.

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

远程回购正在解决.

Kju*_*uly 51

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

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

git push origin :dev  
Run Code Online (Sandbox Code Playgroud)

然后再次推动你的开发:

git push origin dev
Run Code Online (Sandbox Code Playgroud)

我使用Github进行托管,不熟悉unfuddle,但我认为它也可以解决问题.:)


就像@melee提到的那样,你也可以使用

git push origin dev -f
Run Code Online (Sandbox Code Playgroud)

(不确定是否-f有效,但--force没关系)

git push origin dev --force
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为(我在这里不确定)你可以通过`git push origin dev -f`来达到相同的结果 (5认同)
  • @ericgr你应该添加它作为答案! (5认同)
  • 最后,我没有用git命令来解决这个问题.相反,我只是将我的本地文件复制到临时目录,然后删除我的本地文件.然后将过时的文件从远程仓库"拉"到现在空的本地文件夹中.然后我从temp目录复制了那些过时的文件,做了提交然后再回到repo.这至少解决了我当前的问题,现在我又回到正轨,本地和远程仓库同步. (2认同)
  • ^ 除非你丢失了所有 git 历史记录,这肯定不理想。 (2认同)
  • `-f`和`--force`是同义词. (2认同)

小智 7

一直有同样的问题。这个命令对我有用。

git push --set-upstream origin master --force
Run Code Online (Sandbox Code Playgroud)


a20*_*a20 5

如何在主分支上执行此操作,而不从远程存储库中拉取数据:

  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