Git pull 和fetch merge的区别,单独更新某一个文件

Git pull 和fetch merge的区别,单独更新某一个文件,第1张

1. git fetch:相当于是从远程获取最新版本到本地,不会自动mergeGit fetch origin mastergit log -p master..origin/mastergit merge origin/master以上命令的含义: 首先从远程的origin的master主分支下载最新的版本到origin/master分支上 然后比较本地的master分支和origin/master分支的差别 最后进行合并 上述过程其实可以用以下更清晰的方式来进行:git fetch origin master:tmpgit diff tmp git merge tmp从远程获取最新的版本到本地的test分支上 之后再进行比较合并2. git pull:相当于是从远程获取最新版本并merge到本地git pull origin master上述命令其实相当于git fetch 和 git merge在实际使用中,git fetch更安全一些因为在merge前,我们可以查看更新情况,然后再决定是否合并

git 的 submodule 方式不会向仓库添加实际的的内容的,只会通过 .gitmodules 文件保留相应的子模块的哈希值。

由于你要真正要用的代码处于一个子目录中,我的方案是你先把这个子目录提取成一个单独的仓库(可以使用

git-subtree.sh

这个脚本),然后再添加这个仓库为 submodule(或者直接使用 git-subtree.sh 把实际的代码集成到你的项目,这样别人克隆就不需要更新 submodule 了)。这样做的缺点就是每当上游有更新,就需要对 submodule 的仓库做相应更新。

另外:git-subtree.sh 已经合并入 git 了,可能并不在 PATH 中,不能直接执行,不过应该在 git 的安装中的。

另一个思路:

建立 bundles 目录,添加原仓库为 submodule 到此,然后对需要的子目录做相对路径软链接,git 能够正确处理软链接。这可能是比较好的一个办法了,不需要额外维护同上游的同步。

-----------

你在子模块目录中进行的

已经是 git-subree.sh 的 split *** 作了,这个时候该仓库已经和 orgin 完全不同了,等于重新建立了以该 subdirectory 为根的一个仓库,这个仓库中的对象只在你的本地,并不包含在 origin 的仓库中,所以最后才会无效的。

本文以 skywalking-rocketbot-ui 子模块合并到 skywalking 为例,手把手教你如何把 Git 子模块更新到主项目中去。

首先,把fork的skywalking项目克隆到本地:

进入skywalking目录,设置用户名和邮箱:

指定将与复刻同步的远程上游仓库:

查看一下远程上游仓库是否生效:

没有问题,初始化本地子模块:

从子模块的远端更新修改:

从子模块的远端拉取上游的修改:

检查当前文件状态:

发现skywalking-ui已经有更新了,可以直接将其提交到远端,也可以修改其他文件一起提交。

这里先修改一下 CHANGES.md 文件,然后一起提交:

至此,大功告成,可以向社区提交PR了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/8057007.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存