-
Notifications
You must be signed in to change notification settings - Fork 16.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Github进行fork后如何与原仓库同步:重新fork很省事,但不如反复练习版本合并 #67
Comments
Github进行fork后如何与原仓库同步实在是……有太多人同时在帮忙修订错别字或优化 xiaolai 的
这个问题,用显得更“专业点”的说法,叫做: 最省事的办法可能是:
有时候,你需要用到这个省事的办法,比如 xiaolai 的仓库再次整理了 commit 。但在更多情况下,删掉自己fork的库,应该是你的最后选择,而不应该是首选。 和很多人一起向 xiaolai 提交 pull request,这实在是一个反复练习 那要不然,就多练练?以下是傻瓜版操作步骤,还细心配了截图,保管你从 0 也能上手。至于原理嘛,慢慢再搞懂吧。 merge前的设定step 1、进入到本地仓库的目录。 下面所有操作,如无特别说明,都是在你的本地仓库的目录下操作。比如我的本地仓库为 step 2、执行命令 如果只有上面2行,说明你未设置 step 3、执行命令 step 4、执行命令
注1:这一步作为新手,建议严格执行,是为了避免大量无效修改或文本冲突带来的更复杂局面。 注2:如果你已经在fork后的仓库提交了大量对 xiaolai 的仓库并没有价值的修改,那么想要pull request,还是重新回到本文最初的“最省事办法”吧。 merge 的关键命令以下操作紧接着上面的步骤。 step 5、执行命令 step 6、执行命令 step 7、执行命令 step 8、执行命令 如果担心自己不小心改了哪里,可以再次执行命令 现在你已经解决了fork的仓库和原仓库版本不一致的问题。可以放心向 xiaolai 发起 pull request 了。如果以上操作你花了不少时间,而 xiaolai 的仓库 又恰好更新了。很好,一次新的练习机会来了…… |
是也乎,( ̄▽ ̄) 增补之前想增补到 ipynb 中的阐述 PS: 如何优雅的获得上游最新内容?
这是一个常见 github 操作, 但是, 其操作涉及复杂的 git 概念, 1: 首先, 新增 remote (远程上游仓库), 即, 将本书仓库, 追加为 fork 仓库的上游仓库
此时检验本地工作复本仓库的配置就可以看到变化:
在底部追加了 upstream (上游)仓库信息, 可以用 branch 命令来检验
2: 同步上游修订, 使用 fetch 命令
然后, 在此基础上进行修订, 以及 Pull-Request 才是正义的. 简单的说:
PPS:
在哪些情况下可以直接使用master branch来提交Pull Request:
在哪种情况下应该使用主题branch来提交Pull Request:
鉴于Git的分布式开发哲学,每一个库均可以看作是一个独立的项目,显然是后一种(为每一个新特性建立一个专门的主题branch来向主项目推送Pull Request)的贡献方式更可取。 引用自: 如何参与Tianchi(天池)项目以及如何贡献代码 - QTCN开发网 - Powered by phpwind |
如果远程主仓库的历史 commits 被修改整理过,而自己在未同步远程主仓库的情况下有新的 PR 需要提交,可以有两个方案处理:
|
反复练习 |
分享一个命令,直接强制同步源仓库(upstream),就不用删了。。 git fetch upstream && git reset --hard upstream/master && git push -f
|
@realcaiying 我就纳闷为啥楼主会作死去用rebase,原来是你挖的坑…… 楼上 git push -f 其实也不是很可取的方案,虽然比直接删除仓库强。真不怕初学者习惯了,然后用这招破坏掉多人协作库么,为了防止这种情况,企业内部gitlab我都默认master分支不允许 git push -f |
不明白为啥要push -f, 如果你打算用 git clone <upstream_repo_url>
git remote add fork <fork_repo_url>
git fetch origin
git reset --hard origin/master
git checkout -b feature-1
# do some change, commits
git push -u fork 每次同步上游就切到master执行 PS: 此用法仅针对使用github-flow贡献的情况,即每次PR都是从feature分支发起,不适用上文提到的用master进行fork开发(不返回上游库)。 |
显然本地仓库与主仓库的历史不一致是经常会出现的,在企业开发中,如果开发人数达到一定规模,代码回滚、整理历史 commits、测试主分支切换功能测试等可能造成自己仓库和主仓库历史不一致。 使用 git 达到同一个目的的方案有很种。提交 PR 的人不一定需要 |
这些 fetch、commit 的命令操作,和在图形化应用 Github Desktop 上面进行点击操作,效果是一样的吧? 难道觉得这种点击操作太 low 了? |
远程的master分支 介绍里面同一个内容,用不同的名字进行称呼,看得真的凌乱。 |
从 origin vs upstream 的说明 这篇文章的解释,总结出合并的简要过程: 版本一:fork 后未做任何改动fork xiaolai 老师的 repository 后,直接 clone 到自己的电脑上,没有做任何改动,那么,
版本二:fork 后做了改动
可能的意外情况:
|
自己的 repository 的 master 和 upstream 不一样,但是执行完这些操作之后,内容还是不一样呀,难道只能重新删除再 fork? |
强烈建议看上面的 天池 的链接的内容,liujuanjuan 同学和 xiaolai 老师漏掉了一个最关键的内容:要用 branch 提交 pull requests,而不能用 master 分支进行,要不然一些不顺利的情况发生(比如没有采纳merge、误删文件等等)都无法进行 upstream 的同步。 为什么按照 liujuanjuan 和 xiaolai 的步骤全部做完之后,只有第一次是成功的、后面的提交就会出现问题,就是这个原因。 连接里面有个很关键的信息:
PS:为什么会知道这些?因为创建了两个帐号,互相进行各种可能的操作(upstream 删除了但是 origin 没有操作等等各种组合),捯饬了一个下午,一直在纠结所有分类情况里面的剩下的两种无法解决的: upstream 删除内容,我的 master 怎么就 fetch 不过来? 我删除了的内容,如何用 upstream 的进行还原? 总结:全都是用分支 branch 进行隔离,这样,永远不会发生 delete 原始 fork。(除非不玩这个项目了) |
谢谢 |
感谢感谢 |
不错。 |
直接反向发起PR也可以,把主仓库的PR到自己fork的仓库 |
先mark |
你们来自何方,将去往何处?
「JasonKitty <notifications@github.com>」在 2020年7月30日 週四,04:19 寫道:
… 先mark
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#67 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AJFSMFDYNSTDSMMTO6YWHYTR6EUIJANCNFSM4G6YNEIQ>
.
|
界面操作方法,不需要重新fork从主库中提个mr到的fork仓库 比如: 注意左边是的仓库,然后create pull request。创建了完了以后,在你的仓库点击merge。 然后你就可以直接用的你自己的仓库了。 |
Mark |
在搜索github相关操作时,无意间看到这个issue,对你的评论中提到的
产生了一些疑问,当然我也点进上面天池的链接查找原因,但遗憾的是并没有找到(没有说明原因)
故而对此进行了一些验证(下面描述下步骤,截图太杂就不贴了)。
此外,针对
这种情况,我也做了测试,测试显示upstream库删除文件(或者内容),fork库可以通过fetch操作更新(在前面操作的基础上,并且两个库都只涉及到mater分支)。 以上。 所以测试完成之后,就更加疑惑了,如能交流,不胜感激。 |
请教一个问题:如果原仓库新建了很多分支,该怎么同步这些分支到远程啊?有没有什么简单的方法?还是说只能一个分支一个分支去push? |
mark,学习到了 |
感谢分享,用到了 |
mark-fork synchronized explain |
一般往开源上提代码,不需要一直同步主库的代码。 你只需 clone 主库代码仓,然后 git remote add XXX 你的仓库地址。 |
你这也行,就是放弃自己分支的 main 分支。 |
如果是仅仅看,学习,不需要fork到自己的仓库,除非你想二次开发,或者贡献社区。 |
额,看有啥意思,直接撸源码 |
朋友 你的图 好像给反了 |
mark fork |
当前可以在网页上简单操作了,类似于代码回合. 在你的 fork仓库 中可以直接通过 本质就是提了一个 如果你只是想简单快速的同步一次(commit也没有任何变化), 推荐这位兄弟的方法 #67 (comment) |
mark |
学习了 |
学会了 |
学习 |
学会了 |
mark |
有用 |
我以为fork的仓库必须要始终和上游同步,原来完全没必要,只搞分支即可。 |
在网页上使用Fetch upstream功能更新代码,如果代码有冲突需要怎么解决呢? |
thanks |
您的来信已收到。
|
我是莫文俊,邮件已经收到了,谢谢你。
|
这是来自QQ邮箱的自动回复邮件。
您好,您的邮件已经收到,我会尽快给您回复。
|
下面2楼和3楼,都可能是你需要的。
The text was updated successfully, but these errors were encountered: