git - 清理 fork 并从上游重新启动它

标签 git

我 fork 了一个存储库,然后做了一些更改,看起来我把所有东西都搞砸了。

我希望从头开始,使用当前的上游/master 作为我工作的基础。
我应该 rebase 我的存储库还是完全删除它?

最佳答案

最简单的解决方案是(使用“upstream”作为引用原始 repo 分支的远程名称):

git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master  
git push origin master --force 

(类似于这个GitHub page, section "What should I do if I’m in a bad situation?")

请注意,您可能会丢失在 master 分支 上所做的更改(都在本地,因为 reset --hard,在远程端,因为 push --force)。

另一种方法是,如果您想在 master 上保留您的提交,则在当前 upstream/master 之上重播这些提交。
git rebase upstream/master 替换重置部分。然后你仍然需要强制推送。
另见“What should I do if I’m in a bad situation?


一个更完整的解决方案,备份您当前的工作(以防万一)在“Cleanup git master branch and move some commit to new branch”中有详细说明。

另请参阅“Pull new updates from original GitHub repository into forked GitHub repository”以说明“upstream”是什么。

upstream


注意:最近的 GitHub repo 做 protect the master branch反对 push --force.
所以你必须先取消保护master(见下图),然后re-protect it after force-pushing ).

enter image description here


注意:具体在 GitHub 上,有 now (February 2019)删除已 merge 到上游的 pull 请求的 fork repo 的快捷方式。

关于git - 清理 fork 并从上游重新启动它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646167/

相关文章:

gitk 给出 "argument list too long"错误

git jenkins 高级功能

git - 如何将之前被忽略且现在不会显示的文件重新添加到我的 git 存储库中?

git - 版本控制系统中的 RPM 规范文件

git - 如何让 git log 剪切长注释?

git pull 后修改了 Git 子模块,我应该推送吗?

git - 使用裸存储库 Hook 将服务器恢复到过去的提交

git - 如何更改“团队资源管理器”选项卡的 "Commit All"按钮

git - 如何获得git标签的总数

git - 添加 Git 子模块时如何指定分支/标签?