【问题标题】:Git: Reset forked repo to current copy of upstream repoGit:将分叉的仓库重置为上游仓库的当前副本
【发布时间】:2015-10-14 07:29:50
【问题描述】:

我对上游 repo 的分叉副本进行了一些不必要的更改,并且上游 repo 在那段时间也发生了变化。所以我想做的基本上是在不保留我的任何更改的情况下分叉一个上游 repo 的新副本。

不幸的是,我似乎根本不知道该怎么做。我试过三种方法:

  1. 遵循How do I update a GitHub forked repository? 的说明,除了变基(我不希望重播我自己的提交)。这告诉我我是最新的并且没有进行任何更改,但是我的分叉存储库仍然与当前的上游存储库不同。

  2. 按照Reset local repository branch to be just like remote repository HEAD 的说明进行操作。这适用于文件并更改它们,但它也假设我现在正在编辑上游存储库。我的分叉副本没有重置。

  3. 按照http://www.hpique.com/2013/09/updating-a-fork-directly-from-github/ 的说明进行操作,但是当我这样做时,我没有选择“切换底座”。

不幸的是,我对 GitHub 还很陌生,这让一切变得更加混乱。我想作为最后的手段,我可​​以删除我的分叉回购并重新开始,但如果可能的话我宁愿不这样做。

编辑:在 VonC 的帮助下修复。需要将上游存储库克隆到一个新文件夹作为我的本地副本,而不是现有文件夹。

【问题讨论】:

    标签: git github git-fork


    【解决方案1】:

    如果您真的想放弃更改,并将所有内容重置为上游(原始)回购状态,您可以:

    • git 克隆原始 repo(不是你的 fork)

    • 将远程源重命名为上游

        git remote rename origin upstream
      
    • 用你的 fork 的 url 添加原点:

        git remote add origin https://github.com/<you>/<yourFork>
      
    • 将所有分支推送/重置到你的 fork:

        git push origin --force --all
      

    (见the discussion for an illustration of those commands

    【讨论】:

    • 感谢@VonC,但由于某种原因,它似乎没有解决问题......它说“一切都是最新的”但是当我在 github.com 上检查我的回购时,没有任何变化通过,它仍然说“这个分支是 之前的 7 个提交”。我想我按照说明做了所有事情,除了我已经有一个远程上游,所以我不得不删除它。我会附上我的命令行日志的屏幕截图,如果你不介意的话,你可以看看我是否做错了什么。
    • @melange 正确:那是因为分支配置仍然显示:branch.xxx.remote upstream。将upstream 替换为origin 中的.git/config 中的每个branch.xxx.remote 行,然后再次尝试git push --force --all
    • VonC,你的意思是在我的 .git 目录的配置文件中编辑上游 URL,对吧?
    • @melange no:这是由上面的 git 远程命令完成的。我的意思是在.git/config文件的行中将upstream这个词改成originbranch.xxx.remote(比如branch.master.remote upstream改成branch.master.remote origin
    • 你的意思是 .git/config 中这样的行吗? fetch = +refs/heads/*:refs/remotes/upstream/* 我已经替换了它并重新运行 git push 但它似乎产生了相同的结果。我会附上另一个屏幕截图...抱歉,感谢您的耐心等待!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2012-09-24
    • 2017-08-17
    • 1970-01-01
    • 2010-11-18
    • 2012-01-07
    相关资源
    最近更新 更多