`

Git学习笔记(4)--分支

阅读更多
几乎所有版本控制系统都以某种形式支持分支。分支允许你从开发主线上脱离下来,再不影响主线的情况下完成你的工作或者实现你的idea。与很多版本控制系统比起来,Git的分支操作非常迅速。这使得Git从分布式版本控制系统中脱颖而出。

这里再次推荐童鞋先看看这篇文章,以对Git的工作组成和分支概念有直观的了解
《Git分支管理是一门艺术》

分支的概念
了解分支前,我们需要了解提交commit这个概念,每个提交可以简单的理解成为一个快照。多次提交可以构成一个线性结构,1->2->3->...,类似单链表,一般的你可以把这条直线看作你的主分支--稳定版。
而分支相当于指向某个commit的分支,一般的,系统会自动使用master作为分支的默认名字,他指向最后一次提交。当你在master分支上的时候,每次你提交的时候,他都会随着你的commit前移,永远指向最新的。
当你创建新的分支test的时候,就像当与在此线性结构上开出一条新的走向,从单链表变成树,当你再次提交时,这个新的分支指针test会随着提交前移,就像之前的master一样。你可以切换回master,或者在test上再次创建分支,随着你不断创建分支,这个树的结构会变得非常复杂。甚至到难以解读的程度,因此,在正式工作时,一定要谨慎创建分支,每个分支的作用都要记清楚并在合适的时间与主分支合并。

你可以使用这个命令查看分支

git branch                 查看分支
git branch -r              查看远程分支
git branch -a              查看所有分支
git branch --no-merge      查看所有未合并分支
git branch --merge         查看所有已经合并的分支

分支的创建,删除和切换
你可以用如下命令创建分支

git branch <newbranch>

切换到新的分支

git checkout <newbranch>

或者直接使用这个命令创建并切换到新分支

git checkout -b <newbranch>

你可意识用如下命令删除分支

git branch -d <newbranch>

但是未合并的分支不能使用这个命令来删除
如果你坚持删除未合并的分支,可以用这个命令

git branch -D <newbranch>


分支的合并
分支的合并可以将你的开发成果加入到产品中,合并的成功与否至关重要。因此Git对这部分非常重视。你可以使用这个命令将目标分支合并到当前分支(!!注意,是合并"到"你现在所在的分支)

git merge <destbranch>

举个例子,首先确认自己在master分支上,创建文件test,输入内容"2",提交,我建立并切换到分支test,向文件末尾输入内容"567",提交,切换回分支master,在文件末尾输入内容234.提交。此时合并,命令如下

#git checkout master(如果你不在master上)
#echo "2">test
#git commit -a -m "init"
#git checkout -b test
#echo "567">>test
#git commit -a -m "bemergedbranch"
#git checkout master
#echo "234">>test
#git commit -a -m "mergebranch"
#git merge test
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
#git status
# On branch master
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified:      test
#
no changes added to commit (use "git add" and/or "git commit -a")

查看test内容

#cat test
2
<<<<<<< HEAD
234
=======
567
>>>>>>> test
可以看到以下三个分隔标志
<<<<<<< HEAD
=======
>>>>>>> test
这个内容简单明了,我就不多说了,合并时只需删除这些,并留下想要的内容即可。
比如,我觉得主分支上的内容比较合适,因此我删除
<<<<<<< HEAD
=======
>>>>>>> test
567
只留下
234

运行git merge
# On branch master
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified:      test
#
no changes added to commit (use "git add" and/or "git commit -a")

使用add将其提交
#git add test

一切ok了。从这里我们可以看到分支合并还是基于变化的,如果你先修改test,然后回到分支master,不修改master直接合并,那么可以看到分支会被直接合并掉。就算你把2改成3,4,5...这个很容易理解,就不多说了。
mergetool
重磅推出mergetool,一个神奇的工具。mergetool是一个可视化的工具。
输入命令

#git mergetool
最开始,他会让你选择使用什么工具,你可以选择适合自己的工具。
merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse ecmerge p4merge araxis emerge vimdiff
Merging the files: test

Normal merge conflict for 'test':
  {local}: modified
  {remote}: modified
Hit return to start merge resolution tool (meld):
test seems unchanged.

我这里用的是默认的meld,meld的界面如下

修改过程一样,但是关系更加分明。

衍合
衍合的原理是回到两个分支的共同祖先,提取你所在分支每次提交产生的差异,然后将这些差异保存成临时文件(差异补丁文件,很好理解吧),然后从当前分支转换到你需要衍合入的分支,依序使用每个差异补丁文件。
频繁的衍合会极大的方便你的工作,但是请不要将它衍合进你的稳定版本。
关于衍合的妙用我体会的还不是很深。请有经验的童鞋指正。
  • 大小: 39.3 KB
分享到:
评论

相关推荐

    git学习笔记,一看就会

    ### Git学习笔记——入门篇 #### 一、Git简介与安装 **Git**是一种分布式版本控制系统,用于跟踪计算机文件的变化,并协调多个用户之间的共享工作。它最初由Linus Torvalds于2005年创建,目的是为了更高效地管理...

    git零基础实战

    - 使用`git rebase`或`git merge`合并分支时可以调整提交历史。 - **分支管理** - 创建新分支:`git branch &lt;branch-name&gt;`。 - 切换分支:`git checkout &lt;branch-name&gt;`。 - 删除分支:`git branch -d &lt;branch...

    git学习笔记,入门指南以及常用git指令

    这篇笔记主要涵盖了Git的基本操作,包括创建或克隆版本库、管理本地更改、查看提交历史记录、分支管理和标签使用等核心概念。 **1. 创建或克隆版本库** 创建本地版本库: ```bash $ git init ``` 克隆远程版本库:...

    Git学习笔记.docx

    Git是分布式版本控制系统,用于跟踪对文件和项目更改的工具。在本文中,我们将深入探讨Git的一些关键概念、常用命令以及如何在不同场景下使用它。...参考码云提供的Git大全,可以进一步学习和提升Git技能。

    Git学习笔记.pdf

    Git中的分支操作包括创建新分支、切换分支、解决冲突、分支管理策略、强制删除分支以及Bug分支的处理。多人协作时,通常会推送分支到远程仓库,抓取远程分支,以及使用rebase来整理本地分支。 标签管理允许开发者对...

    git学习笔记.zip|git学习笔记.zip

    在“git学习笔记”中,我们通常会涵盖以下几个核心知识点: 1. **Git安装与配置**:首先,我们需要了解如何在不同的操作系统(如Windows、MacOS或Linux)上安装Git,并设置用户信息,包括用户名和邮箱,这些信息会...

    Git学习笔记

    ### Git学习笔记 #### 一、Git简介与安装 **Git**是一种分布式版本控制系统,用于跟踪计算机文件的更改,并协调由多人团队进行的更改。它最初由Linus Torvalds于2005年为Linux内核开发而设计,现已被广泛应用于...

    Git-Note(Git笔记)

    Git笔记主要涵盖了Git的基本概念、常用命令、工作流程以及一些高级用法。通过学习Git,开发者可以有效地管理代码版本,协同开发,防止数据丢失,并实现代码的版本回溯。 1. Git基本概念: - **仓库(Repository)*...

    git常用操作附示例-个人学习笔记

    Git 常用操作附示例 Git 是一个分布式版本控制系统,广泛应用于软件开发和版本管理。下面是 Git 的一些常用操作和命令...这些命令只是 Git 的一些基本操作,Git 还有许多其他功能和命令,可以根据需要进行学习和使用。

    Git学习笔记整理(Learn git branching)

    总结来说,Git学习笔记整理涉及了版本控制的核心概念和操作,详细介绍了如何有效地使用Git进行分支管理、提交变更、撤销操作、合并策略、标签管理等。掌握这些知识点对于开发者进行团队协作和版本控制至关重要。

    git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记

    根据提供的标题、描述、标签及部分内容,我们可以梳理出关于Git的基本使用方法以及分支管理和冲突解决的相关知识点。 ### Git基础知识 #### 创建与初始化仓库 - **`mkdir`**: 用于创建一个新的目录。例如,如果你...

    git学习笔记

    ### Git学习笔记 #### Git的历史背景与发展 - **Git的诞生**:Git的诞生源于Linux内核项目的实际需求。在2002年至2005年间,该项目使用了一款名为BitKeeper的分布式版本控制系统来管理其源代码。然而,随着...

    git学习笔记.docx

    Git 是一个分布式版本控制系统,由林纳斯·托瓦兹(Linus Torvalds)为Linux内核开发而创建。它允许开发者跟踪代码的修改历史,协作开发,并在...通过不断实践和学习,你可以更好地利用 Git 进行高效、安全的代码管理。

    GIT学习笔记.doc

    Git的分支实际上是指向特定commit的指针,通过`git branch`创建分支,`git checkout`切换分支,`git merge`进行合并,而`git branch -D`用于删除分支。 Tag对象在Git中用于标记特定的commit,可以是轻量级的(直接...

    git&github;学习笔记

    ### Git与GitHub学习笔记知识点详解 #### 一、Git版本控制系统概述 **1.1 Git简介** Git是一款分布式版本控制系统,由Linus Torvalds在2005年开发,用于Linux内核的开发。Git的主要特点包括支持离线开发、强大的...

    git入门学习实验笔记

    这个“git入门学习实验笔记”涵盖了在Linux环境中开始使用Git的基本步骤和概念。以下是一些关键知识点的详细解释: 1. **安装Git**: 在Linux系统中,可以通过包管理器(如apt-get for Ubuntu/Debian或yum for ...

    Git-Pro 学习笔记 -xmind 打开

    提炼了各种Git 应用场景的命令和基础说明与分类,基本满足大型软件开发要求,我主要基于Android 系统开发,几百个git 仓库各种分支,合并。

Global site tag (gtag.js) - Google Analytics