Git分支(branch)详细讲解

git分支

正常情况下,如果想要一个脱离主线的分支来开发项目,常常需要完全创建一个源代码目录的副本,对大项目来说,这样的过程会耗费很多时间,所以这是一个比较低效的做法。但是git分支则不同,你会发现使用分支和合并分支是非常方便的。

git分支简介

首先要知道git保存数据不是保存的文件的差异或变化,而是一系列不同时刻的文件快照。
在进行提交操作时,Git会保存一个提交对象(blob对象),该提交对象会包含一个指向暂存内容快照的指针,还包含作者的姓名,邮箱和提交时输入的信息以及指向它父对象的指针,首次提交时提交对象没有父对象,普通提交产生的提交对象有一个父对象,而由多个分支合并产生的提交对象 会有多个父对象。

这里举一个例子,假设现在工作目录中有三个将要被暂存和提交的文件,当使用git commit进行提交操作时,git会先计算每个子目录的校验和,然后在git仓库中为这些校验和保存为树对象,随后Git便会创建一个提交对象,它除了上面提到的那些信息外,还包含指向这个树对象的指针。现在仓库中有五个对象:三个blob对象(保存着文件快照)一个树对象(记录着目录结构和blob对象 索引)以及一个提交对象(包含着指向前述树对象的指针和所有提交信息)

当做些修改后再提交,那么产生的提交对象会包含一个指向上次提交对象(父对象)的指针。

git 中默认分支的名字是master,而origin是Git给克隆的仓库服务器的默认名字。

分支创建

如果要创建一个新的分支testing,则需要使用命令:git branch testing,但是如何知道当前是在哪一个分支上的呢?也很简单,git中有一个名为HEAD的特殊指针,它会指向当前所在的分支。可以使用git log命令查看当前各个分支当前所指的对象。

可以看到当前是在master分支上,mastertesting指针均指向b6fd293的分支上。

分支切换

git checkout testing同时在当前目录下新建Test9.md,并提交。可以看到:

这时候再切换回master分支git checkout master可以看见目录中没有Test9.md了,这条命令做了两件事,第一是将HEAD指回master分支,二是将工作目录中的内容恢复成master分支所指向的快照内容。

这个时候再修改Test8.md的内容之后提交。

当使用命令git log --oneline --graph --all可以看到提交历史和各个分支的指向。

注意:如果想要新建一个分支并同时切换到那个分支上可以运行一个带有-b选项的git checkout命令

删除分支

使用git branch -d可以删除一个分支,这里删除刚刚创建的testing2分支

合并分支

使用git merge命令来合并两个分支,首先切换到master分支中,然后使用命令git merge testing会弹出类似于提交信息文本,用vim语法编辑然后退出。

然后查看分支的详细情况会发现合并的过程其实是创建了一个新的快照,并且将两个分支末端的快照合并到新快照中且自动创建了一个新的提交指向新的快照。这被称作一个合并提交,它的特别之处是他不止有一个父提交。

(下图中C6表示是新的快照,C4和C5合并为C6)

git branch的其他用法(分支管理)

git branch如果不加任何命令运行,则会显示当前所有分支的一个列表

git branch -v可以查看每一个分支的最后一次提交

git branch --mergedgit branch --no-merged
建立新的分支testing2,并且在当前目录中建立新的文件夹“Testing2”里面添加新文件“testing2.md”,并且提交。查看当前git的状态:

这时候使用git branch --merged可以看到已经合并到当前分支的分支列表:

在这个列表中没有*的分支通常可以从删除掉,而--no-merged参数列表中的分支当尝试删除会报错。

原文地址:https://www.cnblogs.com/haoocker/p/12275649.html

时间: 2024-10-29 12:22:46

Git分支(branch)详细讲解的相关文章

Git Step by Step – (5) Git分支(branch)

在前面两盘文章中介绍了Git的基本原理,都是理论知识.这篇文章我们再次回到实践中,看看Git分支(branch)的使用. 在代码版本控制工具中,都会有branch的概念.刚开始建立版本仓库的时候,我们只有一个主分支(master branch),我们不可能把日常的新功能开发.代码优化以及bug修复等概念工作全都放在主分支上,这样会使主分支很难维护.这就是为什么会有branch. 分支的创建及删除 分支的创建 在Git中,branch的创建很简单,我们可以通过下面的命令创建一个"release-1

[git] git 分支( branch ) 的基本使用

分支( branches ) 是指在开发主线中分离出来,做进一步开发而不影响到原来主线. Git 存储的不是一系列的更改集( changeset ),而是一系列快照.当你执行一次 commit 时, Git 存储一个 commit 对象,它包含一个指针指向你当前需要提交的内容的快照. Git 中的 master 分支的功能,和其他分支一样.master 在 git 项目中常见到,是因为 git init 命令运行时默认创建一个分支,并命名为 master. 创建一个新的分支,就是创建一个新的指针

git 分支branch

转:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000 每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以

GIt分支管理策略

大纲: 1.前言 2.创建分支 3.切换分支 4.合并分支(快速合并) 5.删除分支 6.分支合并冲突 7.合并分支(普通合并) 8.分支管理策略 9.团队多人开发协作 10.总结 注,测试机 CentOS 5.5 x86_64,Git 服务器版本:git version 1.8.2.1,客户端版本:git version 1.9.2.msysgit.0.所有软件请到这里下载:http://msysgit.github.io/. 1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对

GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流(转载)

最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮助. GitHub操作总结 : 总结看不明白就看下面的详细讲解. GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'desc

【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

找到一篇很详细的Git教程,真的很不错,推荐!!! GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  . GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'description' ; -- 本地git仓库关联GitHub仓库 : git remote add origin [email 

git 删除远程分支 branch

git 删除远程分支 : git push origin :远程分支 例如删除远程分支 osc(楼主的origin是 osc): [email protected] MINGW64 ~/workspace/HelloWorld/src/selenium (master)$ git push osc :oscTo [email protected]:wuzhiyi51/selenium_learn.git - [deleted] osc git 创建分支(branch) git branch te

Git创建branch 与 解决分支冲突

由于之前写一个Spring项目的时候是自己和一位大佬一起协作的,在中间差点因为我的git命令不熟悉而导致我的本地分支错误合并.这里仔细写一下git创建分支时候的一些坑和解决分支冲突时候的一些方法. 先写一下一些比较常用的命令 版本回退命令 git reset --hard 版本号 版本回退后后悔了怎么办? 先 git reflog 查看未来的版本号 然后 git reset --hard 版本号 想要让git log --graph看到的东西更好看 不妨使用 git rebase branch

GIT 分支管理:多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git remote origin 或者,用git remote -v显示更详细的信息: $ git remote -v origin https://github.com/wangmingshun/studygit.git (fetch) origin https://github.com/wangming