`

git merge 和 git rebase 小结

    博客分类:
  • git
 
阅读更多

git merge是用来合并两个分支的。


git merge b

      # 将b分支合并到当前分支

同样 git rebase b,也是把 b分支合并到当前分支

-----------------------------------

他们的 原理 如下

 

 

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。
$ git checkout -b mywork origin
假设远程分支"origin"已经有了2个提交,如图
 
现在我们在这个分支做一些修改,然后生成两个提交(commit).
$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...
但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。
 
 
在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):
 
但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:
$ git checkout mywork
$ git rebase origin
这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。
 
当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)
 
二、解决冲突
rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
git rebase --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
git rebase --abort
三、git rebasegit merge的区别
现在我们可以看一下用合并(merge)和用rebase所产生的历史的区别:
当我们使用Git log来参看commit时,其commit的顺序也有所不同。
假设C3提交于9:00AM,C5提交于10:00AM,C4提交于11:00AM,C6提交于12:00AM,
对于使用git merge来合并所看到的commit的顺序(从新到旧)是:C7 ,C6,C4,C5,C3,C2,C1
对于使用git rebase来合并所看到的commit的顺序(从新到旧)是:C7 ,C6‘,C5',C4,C3,C2,C1
 因为C6'提交只是C6提交的克隆,C5'提交只是C5提交的克隆,
从用户的角度看使用git rebase来合并后所看到的commit的顺序(从新到旧)是:C7 ,C6,C5,C4,C3,C2,C1
 
分享到:
评论

相关推荐

    详解git merge 与 git rebase的区别

    Git 是一个分布式版本控制系统,它提供了两种合并分支的策略:`git merge` 和 `git rebase`。两者都是为了整合不同分支的更改,但它们在处理合并的方式上有显著的差异。 ## Git Merge `git merge` 是最常见的合并...

    前端大厂最新面试题-git rebase_ git merge.docx

    git rebase 和 git merge 的理解与区别 Git 是一个版本控制系统,广泛应用于软件开发过程中。其中,git rebase 和 git merge 是两个常用的命令,都是用于合并分支,但是它们的实现机制和应用场景却有所不同。 git...

    Git的merge和rebase你真的了解吗?

    本文将深入探讨Git的两个关键功能——`merge`和`rebase`,以及它们在日常开发中的应用。 1. **Git的版本控制**:Git的核心功能是版本控制,它能够记录文件的每一次修改,包括修改的内容、作者和时间。这使得开发者...

    git分支操作.txt

    gti详细的分支操作,在git中,可以使用git merge 和git rebase两个命令来进行分支的合并。 git merge 和git rebase在大体上都差不多,下文主要以git merge来例来讲解分支的合并流程。 如果你想了解分支合并的更多...

    ZhongJinHacker#notes#git_merge和git_rebase总结1

    文件可能会发生冲突,需要解决一下最后结果* 85ef130 (HEAD -> master) Merge branch 'dev'可以看出,merge 有保留d

    11. 高级 1: 不喜欢 merge 的分叉? 用 rebase 吧1

    小结:`git rebase` 目标基础点。在 `rebase` 之后,记得切回 `master` 再 `merge` 一下,把 `master` 移到最新的 commit。这样,提交历史就变得整洁了。 在 `rebase` 之前,需要切换到要 `rebase` 的 branch 上,...

    git merge tools

    在团队协作中,确保每个人都了解如何正确使用 `git merge` 和处理冲突是至关重要的,以防止项目进展受阻。 总之,理解并熟练运用 `git merge` 是 Git 版本控制的关键技能。它不仅涉及到代码的合并,还包括冲突的...

    git批量拉取项目的脚本,简便快捷

    在标签“git”相关的其他知识点中,包括但不限于分支管理(如`git branch`, `git checkout`, `git merge`, `git rebase`)、提交历史查看(`git log`)、回退版本(`git reset`, `git revert`)、标签管理(`git tag...

    git 视频教程

    git视频教程.4.6.Git 命令 - git merge、git mergetool.mp4 git视频教程.4.7.Git 命令 - git log、git stash、git tag.mp4 git视频教程.5.1.Git 命令 - git fetch.mp4 git视频教程.5.2.Git 命令 - git pull.mp4 git...

    Sungq1990#blog#git rebase操作1

    merge主要发生在这样几个地方1 两个人同时开发一个分支,在拉取对方代码的时候2 要将代码合并到master的时候git pull origin master

    Git-2.37.3-64-bit_3Git-2.37.3-64-bit_3Git-2.37.3-64-bit_3Git-2.3

    对于团队项目,可以使用`git clone`下载远程仓库,`git pull`同步远程更新,`git push`推送本地更改,以及`git fetch`和`git merge`或`git rebase`来整合远程分支。 总之,Git-2.37.3-64-bit_3.exe是Git的64位...

    配合Git flow 流程使用的git 操作命令指南

    这可以通过`git fetch`、`git rebase`和`git push`来实现。 8. **版本控制** 使用Git flow,你可以更好地管理版本,通过release和hotfix分支确保线上版本的稳定。每次合并到master分支都会创建一个对应的tag,便于...

    Git实战IDEA操作

    3. 合并分支:"VCS" -> "Git" -> "Merge",选择要合并的分支,IDEA会自动解决冲突。 六、解决冲突 1. 当多人修改同一文件时,可能会出现冲突。IDEA会在冲突文件中用特殊标记显示冲突部分。 2. 解决冲突后,需要...

    Git小乌龟的Windows安装资源

    Git小乌龟(TortoiseGit)是一款专为Windows用户设计的Git图形界面工具,它提供了与Windows资源管理器集成的界面,使得在Windows环境下使用Git变得更加直观和方便。Git本身是一个分布式版本控制系统,用于跟踪文件和...

    Git常用命令面试题 60道1

    Git 变更历史可以使用 `git merge` 和 `git rebase` 命令来合并分支。 * `git merge A分支`: 将 A 分支合入到当前分支中且为 merge 创建 commit * `git merge A分支 B分支`: 将 A 分支合入到 B 分支中且为 merge ...

    Git版本控制管理 第2版.pdf.zip

    `git merge`和`git rebase`命令的区别和适用场景。 3. **Git Flow工作流**:理解并应用git flow命令行工具,包括初始化、创建feature分支、完成feature、发布release、维护hotfix等操作。 4. **解决冲突**:当多个...

    git文件存放结构思维导图

    "Git文件存放结构思维导图" Git是一个版本控制系统,通过对文件的存储和管理来实现对项目的版本控制。...Git合并策略包括Recursive、Fast-forward、rebase和git merge等,选择合适的策略可以快速地合并分支。

    git源码压缩包v2.42.0

    此外,还有诸如`git diff`、`git log`、`git merge`和`git rebase`等命令,帮助开发者高效地管理代码。 总之,Git v2.42.0提供了一套强大且灵活的工具,使得软件开发中的版本控制变得简单而高效。在Linux环境下编译...

    Git的客户端+服务端Gitblit+Git clone

    `git branch`用于列出、创建或删除分支,`git checkout`用于切换或创建并切换到指定分支,`git merge`则用于合并分支。 此外,Git的重置和变基操作对于解决冲突和回溯历史非常有用。`git reset`可以撤销提交,`git ...

Global site tag (gtag.js) - Google Analytics