今天在学习Git的分支合并时,对merge命令的具体处理方法产生了思考:
分支主要有3种:
直接合并(straight merge):把两条分支上的历史轨迹合并,交汇到一起;
压合合并(squashed commits):将一条分支上的若干个提交条目牙合城一个提交条目,提交到另一条分支的末梢;
拣选合并(cherry-picking):拣选另一条分支上的某个提交条目的改动带到当前分支上。
假设当前项目有两条分支:master和develop,对应的版本演进轨迹如下(左右标识了时间顺序):
C1---->C2---->C3----->C4---------->C6 (master)
|
|
|--------------->C5------------->C7 (develop)
则checkout到master上,将develop分支合并到主分支上,得到
C1---->C2---->C3----->C4----->C5----->C6------>C7----->C8(Merge branch 'develop') (master)
那具体是如何合并的呢?
是先把C5合并进C4和C6,没问题再合并上C7,没问题之后再commit得到C8?
还是直接把develop分支的末梢和master分支的末梢进行合并,如果有冲突则先处理,然后commit得到C8呢?
后面通过合并log,我猜测应该是后者是正确的。
当然,git log是按照时间顺序组织的
注意:
使用git diff 命令查看各个commit与当前分支master的末梢的差异,会发现:
1、git diff C7:没有C4、C6两个提交的内容,跟直接与develop分支的C7比较是一样的;
2、git diff C6:没有C5提交的内容;
3、git diff HEAD:跟C8比;
4、git diff HEAD^:跟C6比,而不是C7;
5、git diff HEAD~2:跟C4比,而不是C6;
由此,可以猜测到(实践已证实):
使用git reset --hard C7:将会失去C4和C6两个commit(包括实际内容和log),得到的master分支将和develop分支一模一样。
总结:
1、合并两个分支,是把两个分支末梢的最新版本断面合并,log安实践顺序交汇到一起;
2、每个commit对应的内容与每个分支上相应commit对应的内容是完全一致的(个人理解,在.git版本库中,一个commit只有一份存储,不论是在哪个分支上做的commit),因此使用git diff和git reset命令时需要尤其注意和小心,不要搞错;
3、HEAD引用对应某个分支,即使合并后,也是对应所在分支上的commit的层级,与其他分支上commit无关。
分享到:
相关推荐
使用 git merge dev 命令可以把 dev 分支合并到当前分支上。在合并后,必须要添加修改,提交之后才能删除 dev 分支。如果有冲突,需要手动解决分支冲突。 9. Git stash 命令 使用 git stash 命令可以把当前工作...
Head First Git是一本易于理解的Git入门书籍,适合所有级别的开发者。该书使用了brain-friendly的教学方法,通过插图、故事和实践活动帮助读者快速掌握Git的基本概念和高级技术。 Git的基本概念 Git的基本概念包括...
在Git中,merge用于将指定分支合并到当前分支,出现合并冲突时,可以使用git-merge --abort命令取消合并。分支操作中,可以使用git-branch命令查看、创建、删除或重命名本地分支。查看远程分支时,需要使用git-...
- **合并分支**:使用 `git merge` 命令可以将一个分支的工作合并到当前分支。例如: ```bash git merge feature_branch ``` - **删除分支**:使用 `git branch -d` 命令删除不再需要的分支。例如: ```bash ...
- **合并分支**:使用`git merge <branch>`命令可以将其他分支合并到当前分支(如`master`)。 - **处理合并冲突**:当合并时出现冲突,需要手动解决这些冲突,并通过`git add`命令标记已解决的文件,然后再次提交。...
Git Bash是一款在Windows环境下模拟Unix/Linux命令行工具的软件,它允许用户在Windows系统中使用Git和其他基于Unix的命令行工具。...通过实践和持续学习,你可以更好地理解和利用Git Bash的强大功能。
通过深入理解和熟练运用以上Git命令,你可以更高效地进行团队协作,确保代码的版本管理和维护。Git的学习并不止于此,还包括钩子(hooks)、子模块、rebasing等高级特性,不断探索和实践,将使你在开发过程中...
接下来,我们将详细探讨与Git分支相关的常用命令及其应用场景。 ##### 1. `git branch [option] [name]` - **不带参数**:列出所有本地分支,当前活动分支前面会有星号标记。 - **`git branch <branch_name>`**:...
### Git常用命令详解 #### 一、初始化与状态查询 - **`git init`**: 初始化一个新仓库。当你想要开始使用Git管理一个项目时,首先需要在这个项目的根目录下运行此命令,这样Git就能知道应该从哪里开始追踪文件的...
这份“最全Git命令学习文档”集合了Git的基础到高级命令,是新手入门Git的理想资源。以下是一些关键知识点的详细说明: 1. **安装Git**: 在Windows、MacOS或Linux上安装Git,通常是通过下载并运行安装程序。安装...
Git是一种分布式版本控制工具,它允许多人在同一时间处理同一个文件的不同部分,而不会互相冲突。Git管理代码的方式主要依靠几个基本的命令,熟练使用...Git的使用是提高团队协作效率和代码管理能力的重要技能之一。
Git 变更历史可以使用 `git merge` 和 `git rebase` 命令来合并分支。 * `git merge A分支`: 将 A 分支合入到当前分支中且为 merge 创建 commit * `git merge A分支 B分支`: 将 A 分支合入到 B 分支中且为 merge ...
6. 将 tmp 分支修改的代码 merge 到 sproid_ts 上:使用 `git merge tmp` 命令可以将 tmp 分支修改的代码 merge 到 sproid_ts 上。 7. 获取最新远程分支代码:使用 `git fetch [remotename]` 命令可以获取最新的远程...
标题《git常用命令大全》所涉及的知识点覆盖了使用Git进行版本控制的日常操作。Git是一个开源的分布式版本控制系统,被广泛用于代码管理,可以有效地追踪文件的变更,管理分支的合并与冲突,以及回退到旧版本等。...
### git操作命令总结 #### 一、配置与初始化 **标题和描述中提及的知识点:** - **配置用户信息:** 使用 `git config --global user.name "zoujun"` 和 `git config --global user.email "zoujun@youku.com"` 来...
这份“Git学习资料”包含两份文档:`git操作指南.pdf`和`GitBook.pdf`,它们将帮助你深入理解Git的核心概念、基本操作以及高级用法。 一、Git核心概念 1. **仓库(Repository)**:Git仓库是存储所有版本信息的地方...
除了上述命令,还有一些常用的辅助命令,如`git fetch`(获取远程仓库的最新改动但不合并)、`git pull`(相当于`git fetch`+`git merge`)、`git stash`(暂存未完成的工作,方便切换分支)等。 了解并熟练掌握...
这份"git常用命令操作思维导图"提供了全面的Git基础操作指南,是学习和掌握Git的宝贵资源。 首先,让我们从最基础的开始。在你的本地计算机上安装Git后,你需要创建一个新的Git仓库。这可以通过在目标目录下运行`...
如果合并了不想要的提交,可以使用 `git reset --hard ORIG_HEAD` 来取消最新的一次提交。 分支合并时,如果要取消快转(fast-forward)机制,可以使用 `git merge branchname --no-ff`。在合并非快转状态下,Git会...