首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Git 教程 -- 基于自己学习记录

" //提交 git checkout master //切回master分支 git merge dev //合并分支 git branch...衍合分支。 git rebase dev ? 合并(merge)和衍合的区别: merge把两个分支最新的快照以及两者的共同祖先进行三方合并,合并的结果是产生一个新的提交对象。...衍合是把在一个分支里发生的变化补丁在另一个分支重新打一遍。 衍合最后生成的快照,其实和普通的三方合并的快照内容一模一样。虽然最后整合得到的结果没有任何区别, 但是衍合能产生一个更为整洁的提交历史。...如果观察一个衍合过的分支的历史记录,看起来会更清楚:仿佛所有修改都是在一跟线上先后进行的,尽管实际上他们原本是同时并行发生的。 5. 撤销操作。....diff 文件只是记录文件改变的内容,不带有 commit 记录信息,多个 commit 可以合并成一个 .diff文件。

70320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    git创建分支,合并分支,常用命令

    HEAD 在一次 checkout 之后移动到了另一个分支 这条命令做了两件事。它把 HEAD 指针移回到 master 分支,并把工作目录中的文件换成了 master 分支所指向的快照内容。...由于当前 master 分支所指向的提交对象(C4)并不是 iss53 分支的直接祖先,Git 不得不进行一些额外处理。...3.6  分支的衍合 把一个分支整合到另一个分支的办法有两种:merge 和 rebase(译注:rebase 的翻译暂定为“衍合”,大家知道就可以了。)。...一般我们使用衍合的目的,是想要得到一个能在远程分支上干净应用的补丁 — 比如某些项目你不是维护者,但想帮点忙的话,最好用衍合:先在自己的一个分支里进行开发,当准备向主项目提交补丁的时候,根据最新的origin...将特性分支上的另一个特性分支衍合到其他分支。 现在可以快进 master 分支了(见图 3-33): $ git checkout master $ git merge client ?

    15K51

    一种邪道的 Git 整洁之法——rebase & squash

    在团队开发中,一般来说大家遵从的 Git 使用方法是这样子的: master 分支作为发布分支,原则上发不到生产环境的代码都应该基于 master 分支 每个人管理至少一个开发分支,开发分支与具体的需求绑定...,又称为 “压缩合并”,会将分支的所有提交点(commit)合并成一个,然后再合并到 master 分支上。...首先最理想的情况是,冲突点尽快合入 master 分支,然后相关的分支重新 rebase master。但实际操作中,冲突点可能无法快速解决,这个时候,这个模式也是有解决方法的。...我们先看看分支合并以后的状态(灰色分支表示不存在了): 这个时候,另一个特性分支,只需要 rebase master,就可以回归了,毕竟冲突点早就合入 master 了,世界重归宁静。...其实本质上,就是如何选取基准分支的问题——master 分支也可以是相对的,在不同的场景下,我们开发中可以视另一个分支为我们的基准分支,那么 rebase 其实也就是另一种 squash merge 而已

    62620

    Git最全系列教程(三)

    HEAD 在一次 checkout 之后移动到了另一个分支 这条命令做了两件事。它把 HEAD 指针移回到 master 分支,并把工作目录中的文件换成了 master 分支所指向的快照内容。...由于当前 master 分支所指向的提交对象(C4)并不是 iss53 分支的直接祖先,Git 不得不进行一些额外处理。...3.6 分支的衍合 把一个分支中的修改整合到另一个分支的办法有两种:merge 和 rebase(译注:rebase 的翻译暂定为“衍合”,大家知道就可以了。)。...一般我们使用衍合的目的,是想要得到一个能在远程分支上干净应用的补丁 — 比如某些项目你不是维护者,但想帮点忙的话,最好用衍合:先在自己的一个分支里进行开发,当准备向主项目提交补丁的时候,根据最新的 origin...将特性分支上的另一个特性分支衍合到其他分支。 现在可以快进 master 分支了(见图 3-33): $ git checkout master $ git merge client ?

    98330

    Git 进阶高频操作

    $ git stash branch mod # 操作 mod 分支 ... # 切回 master 分支,并进行合并 $ git checkout master Switched to branch...git commit -a -m "Saved state" #回到之前的分支进行更新 $ git checkout master # 编辑紧急修复 git commit -a-m "Fix...此模式下你可以重新排序、编辑、删除,把多个提交合并成一个,把一个提交分离成多个, 然后把它们放回原来的分支或者不同的分支。...干活都在 dev 分支上,也就是说,dev 分支是不稳定的,到某个时候,比如 1.0 版本发布时,再把 dev 分支合并到 master上,在 master 分支发布1.0版本; 你和你的小伙伴们每个人都在...image.png 选择分支的衍合 or 合并 衍合的风险 呃,奇妙的衍合也并非完美无缺,要用它得遵守一条准则: 一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。

    71520

    图解 Git 使用

    分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。...下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。 这样,maint分支就不再是master分支的祖父节点。此时,合并 (或者 衍合) 是必须的。 ?...比如说你想要编译1.6.6.1版本的git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master...合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。 本质上,这是线性化的自动的 cherry-pick ?...上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。 要限制回滚范围,使用--onto选项。

    78941

    Git那些事系列:从业务场景到高级技巧的完整指南(二)

    如何将一个代码修改优雅合并到两个分支上 业务实践中,经常会出现代码双合并的情况,比如发现一个线上缺陷后,需要在主干和发布分支同时拉取修复分支,在修改缺陷后,分别向主干和发布分支发起合并,从而完成对发布版本和未来版本的问题修复图片...当你在为这个骚操作自鸣得意的时候,突然发现,貌似事情不是这么简单,因为这里会存在两个问题1.磁盘占用double,在很多的大仓项目中,这会导致电脑运行比较吃力2.无法智能解决冲突,如果两个分支代码不强一致...我们首先来解决第一个问题,即磁盘占用double的问题,这时,我们想到,其实还有一个命令可以直接将另一个分支的部分目录文件覆盖过来,即:checkout bugfix/xxx path事实上,我们还可以把这个场景更复杂一下...release分支不一致的前提下,建议:连续修改用Merge,人工解冲突非连续修改用Cherry-pick同时:给出三个分支管理建议,强烈建议项目中强制执行:1.非必要不要非连续修改,非必要必要合部分代码...2.分支拉取快拉快合,一次分支拉取只解决一个子问题/完成一个子需求,3.分支拉取少量多次,一次分支拉取只提交少量代码,确保代码可控

    71981

    图解Git

    当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。...在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。 ? 即便当前分支是某次提交的祖父节点,git会同样操作。...下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。 这样,maint分支就不再是master分支的祖父节点。此时,合并 (或者 衍合) 是必须的。 ?...Rebase 衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。...上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。 要限制回滚范围,使用--onto选项。

    77180

    21张图,将 Git 工作原理彻底说清楚…

    当前分支由附在其上的 HEAD 标识。这张图片里显示最后 5 次提交,ed489 是最新提交。master 分支指向此次提交,另一个 maint 分支指向祖父提交节点。...在运行命令之前,master 指向 ed489,提交后,master 指向新的节点 f0cec 并以 ed489 作为父节点。 即便当前分支是某次提交的祖父节点,git会同样操作。...下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。这样,maint分支就不再是master分支的祖父节点。此时,合并 (或者 衍合) 是必须的。...Rebase 衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。...本质上,这是线性化的自动的 cherry-pick 上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。

    73221

    Git那些事系列:从业务场景到高级技巧的完整指南(一)

    这时,你想到了,可以发起两次向主干的合入,一次是将feature/product_list分支合入master,一次是将feature/user_manager的部分目录合入master  ——项目组的测试同学提出了不同意见...但这其实不是这篇文章的重点,因为不论是哪种方案,都会遇到一个相同的问题 如何将一个分支部分文件/文件夹优雅的合并到另一个分支 OK,看起来这个问题的解决与否成为你是否成功捍卫工程师尊严的关键环节,那么我们来一起解决它...A //切换到A分支 当然也可以用快捷方式: git checkout -b A //新建A分支并切换到A分支 同时git checkout 后面除了跟分支,还可以跟某次提交和文件,这里就涉及到另一个功能...合并到当前分支上 git rebase即就是物理意义上的变基 git checkout feature //切换当前分支为featrue分支 git rebase master // 将当前分支变基到当前分支...在feature/product_list分支合并到master,这里通过merge git checkout master git merge -b feature/product_list 当然,

    26340

    Git那些事系列:从业务场景到高级技巧的完整指南(一)

    这时,你想到了,可以发起两次向主干的合入,一次是将feature/product_list分支合入master,一次是将feature/user_manager的部分目录合入master 图片 ——...但这其实不是这篇文章的重点,因为不论是哪种方案,都会遇到一个相同的问题 如何将一个分支部分文件/文件夹优雅的合并到另一个分支 OK,看起来这个问题的解决与否成为你是否成功捍卫工程师尊严的关键环节,那么我们来一起解决它...checkout A //切换到A分支 当然也可以用快捷方式: git checkout -b A //新建A分支并切换到A分支 同时git checkout 后面除了跟分支,还可以跟某次提交和文件,这里就涉及到另一个功能...feature 合并到当前分支上 git rebase即就是物理意义上的变基 git checkout feature //切换当前分支为featrue分支 git rebase master // 将当前分支变基到当前分支...在feature/product_list分支合并到master,这里通过merge git checkout master git merge -b feature/product_list 图片 当然

    923182

    如何高效地合并Spark社区PR到自己维护的分支

    经常有朋友问我是怎么把社区的PR合到自己分支上的,我之前跟他们介绍的做法是基于PR拉分支,在IDEA中单个文件diff合并。如果是偶尔合下社区代码,这种方式也不算太费事。...remote update git cherry-pick 2c5b9b1173c23f6ca8890817a9a35dc7557b0776 执行完,提示以下信息就表示合并成功了: ➜ spark...-b pr-19301 upstream/pr/19301 git checkout pr-19301 # PR分支大都基于master开发,以upstream/master分支为基准,重新apply...PR分支上的修改 git rebase upstream/master # 通过diff提取这次PR的patch文件 git diff upstream/master > pr-19301.patch...git branch -D pr-19301 参考 Useful Developer Tools A successful Git branching model Git 分支 - 分支的衍合 最后 上述方法不能保证合并

    2.3K80

    用21张图,把Git 工作原理彻底说清楚

    当前分支由附在其上的HEAD标识。这张图片里显示最后5次提交,ed489是最新提交。master分支指向此次提交,另一个maint分支指向祖父提交节点。...下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。这样,maint分支就不再是master分支的祖父节点。此时,合并[1](或者衍合[2])是必须的。...比如说你想要编译1.6.6.1版本的Git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master...合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。本质上,这是线性化的自动的 cherry-pick。...上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。 要限制回滚范围,使用–onto选项。

    3.5K20

    Git基础知识(七)--分支开发工作流

    当develop分支稳定后可以合入master分支,等待下一次发布。 ? 渐进稳定分支 大型项目中,通过类似的方式使分支具有不同级别的稳定性。...功能分支工作流背后的核心思路是所有的功能开发应该在一个专门的分支,而不是在master分支上。 这个隔离可以方便多个开发者在各自的功能上开发而不会弄乱主干代码。...但功能分支不是从master分支上拉出新分支,而是使用develop分支作为父分支。当新功能完成时,develop分支。 新功能提交应该从不直接与master分支交互。 ?...master # 以非快进分方式将release分支合入master分支 $ git merge --no-ff release-1.2 # 基于当前提交创建标签 $ git tag -a 1.2 将版本信息更新至开发分支...这种工作流不是使用单个服务端仓库作为『中央』代码基线,而让各个开发者都有一个服务端仓库。 这意味着各个代码贡献者有2个Git仓库而不是1个:一个本地私有的,另一个服务端公开的。

    1.2K30

    图解 Git 工作原理,彻底说清楚!!!

    分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。这张图片里显示最后5次提交,ed489是最新提交。master分支指向此次提交,另一个maint分支指向祖父提交节点。...下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。这样,maint分支就不再是master分支的祖父节点。此时,合并[1](或者衍合[2])是必须的。...比如说你想要编译1.6.6.1版本的Git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master...合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。本质上,这是线性化的自动的 cherry-pick。...上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。 要限制回滚范围,使用–onto选项。

    39410

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券