学习git: git分支笔记

学习视频:http://edu.51cto.com/course/course_id-1838.html整理

Git学习—git分支

在git中branch就是一个文本,放了一个hash值;其中git branch命令会列出所有的branch

$ git branch
* master
$ git branch --list
* master

创建branch命令就是git branch <branch_name>, 比如创建一个web分支

$ git branch web
$ git branch

* master

web

可以看到web这个branch已经创建出来了,能用git branch命令列出来了。

从上面可以看到我们当前在*master这个branch, 如果我们切换到web这个branch,可以用命令git checkout web

$ git checkout web

Switched to branch ‘web‘

$ git branch --list

master

* web

可以看到web前面有个*号,代表web就是当前的branch.图解表示如下

如上图,其实web分支也是指向c这个commit对象的。验证下命令

进入./git/refs/heads文件夹下,可以看到web这个文件

通过命令

$ cat *

86a4a0ecd556382aac675869697e19b7dc3f37b7

86a4a0ecd556382aac675869697e19b7dc3f37b7

可以看到master文件和web文件内容都是相同的hash值,因此他们指向相同的commit对象,

$ git rev-parse web

86a4a0ecd556382aac675869697e19b7dc3f37b7

$ git rev-parse master

86a4a0ecd556382aac675869697e19b7dc3f37b7

通过上面的两命令也可以看出来。

但你通过命令

$ cat HEAD

ref: refs/heads/web

可以看出HEAD内容发生了变化,从原先head指向master改为指向了web分支,也就是上图变为了这个样子

$ git checkout master

Switched to branch ‘master‘

Your branch is up-to-date with ‘origin/master‘.

$ cat .git/HEAD

ref: refs/heads/master

$ git branch

* master

web

上面第一个命令是切换回master分支,后面两个证明了切换是成功的。

删除branch很简单:git branch -d web

$ git branch -d web

Deleted branch web (was 86a4a0e).

$ git branch

* master

~~~~

git checkout –b <branch> 命令可以创建一个branch分支,并且切换到这个分支,看下面的命令

$ git branch

* master

$ git checkout -b web

Switched to a new branch ‘web‘

$ git branch

master

* web

看到绿色web分支前面的*号了吧,这代表web分支被创建被切换到了这个分支。

在这个新分支中添加文件,并commit

$ echo "this is a java beginner project" > README.md
$ git status

On branch web

Untracked files:

(use "git add <file>..." to include in what will be committed)

README.md

nothing added to commit but untracked files present (use "git add" to track)

$ git add README.md

warning: LF will be replaced by CRLF in README.md.

The file will have its original line endings in your working directory.

$ git status

On branch web

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

new file:   README.md

然后尝试删除web分支

$ git branch -d web

error: The branch ‘web‘ is not fully merged.

If you are sure you want to delete it, run ‘git branch -D web‘.

看上面的提示就知道问题了吧,如果用-d删除一个分支,需要把这个分支合并;如果你想不合并删除,则要用-D参数

$ git merge web

Updating 86a4a0e..d1bc16f

Fast-forward

README.md | 2 ++

1 file changed, 2 insertions(+)

create mode 100644 README.md

$ git branch -d web

Deleted branch web (was d1bc16f).

上面的Fast-forward代表原先web分支父commit对象是master分支的的最近的 commit;如果web分支父commit对象不是master分支的的最近的 commit,则不是Fast-forward

3-way merge


上面的图是我根据录像介绍和自己的理解做的,比录像图在master和web分支分别多了一个commit, 在合并时候

1. 先把c和h做比较,然后生成一个patch

2. 把patch应用到e, 产生i这个commit对象,

3. master指针指向i这个对象

4. 如果指向git merge web和git branch –d web命令后,web分支被删除,

5. 并且f,g,h这些commit会被git的垃圾回收机制给销毁也被废弃掉了。

上面方法就是3-way merge

在我的实践中c的commit hash值是commit 971043d5f42cb3c917bfb1b75df9bedf91eef08a

我的web分支中h的commit hash值是commit e0da286c1621328a43dc1d5eaa7a57c28251f0d4

我的master分支中e的commit hash值commit 83424500c510ae68bbc25ee1e641f14e492bf132

$ git merge web

Auto-merging firstfile.txt

CONFLICT (content): Merge conflict in firstfile.txt

Automatic merge failed; fix conflicts and then commit the result.

我在merge时候,出现了merge冲突,需要手动解决,我就这样做了

$ git status

On branch master

You have unmerged paths.

(fix conflicts and run "git commit")

Unmerged paths:

(use "git add <file>..." to mark resolution)

both modified:   firstfile.txt

no changes added to commit (use "git add" and/or "git commit -a")

$ git add firstfile.txt

$ git commit -m "master branch: prompt merge conflict, so need to merge manually"

[master 8a63c46] master branch: prompt merge conflict, so need to merge manually

上面代表merge成功了,手动解决了。

$ git log

commit 8a63c46c7e757ec893c134542cb78fa4ee3d4f2f

Merge: 8342450 e0da286

通过上面log,可以看出commit i已经出现,并且他是合并commit e和commit h生产的,和我们上面的图就一致了

$ git branch -d web

Deleted branch web (was e0da286).   //看括号的值,俨然就是web分支中的h commit hash值

时间: 2024-08-02 11:02:56

学习git: git分支笔记的相关文章

git学习——&lt;五&gt;git分支

git学习——<一>git安装 git学习——<二>git配置文件 git学习——<三>git操作 git学习——<四>git版本管理 一.提出问题 今天开发的过程中遇到一个问题,A组接到开发任务要修改file文件,B组在此之前的15天为了完成自己的开发任务对file文件进行了修改,为了同步代码,B组将自己未完成的模块file文件提交到了cvs上.A对此一无所知,A组在完成开发任务后,把file文件完全上到了现网环境,报错了. 当然,避免上述问题的途径很多,

git学习(三)——git的分支操作

git的分支操作 软件项目中启动一套单独的开发线的方法,可以很好的避免版本兼容开发的问题,避免不同版本之间的相互影响,封装一个开发阶段,解决bug的时候新建分支,用于对该bug的研究: git中跟分支相关的命令 git branch git branch 分支名 创建分支 git branch 不加任何参数,列出所有的分支,分支前面有*号,代表该分支为当前所在分支 * 创建分支的时候,分支名不用使用特殊符号 git branch -d 分支名 *不能删除当前所在的分支 删除分支,如果在分支中有一

jenkins学习10-参数化构建(构建git仓库分支)

前言 当我们的自动化项目越来越多的时候,在代码仓库会提交不同的分支来管理,在用jenkins来构建的时候,我们希望能通过参数化构建git仓库的分支. Git Parameter插件 先下载 Git Parameter 插件,系统管理-插件管理-搜索:Git Parameter 下载安装 安装完成 参数化构建工程 General-参数化构建过程-添加参数-Git Parameter, 填写 Git Parameter 参数配置 Name 自定义参数名称 Description 描述 Paramer

Git教程(笔记)

看了廖雪峰写的教程,由浅入深,花了三天的时间学完了,做一下学习笔记吧 Git简介 Linus创建Linux之后为方便管理Linux代码,自己用C写了这个分布式版本控制系统.2008年的时候GitHub网站上线,为开源项目免费提供Git存储. 集中式vs分布式: 集中式版本控制系统,版本库存放在中央服务器,每个人用的都是自己的电脑,用的时候先从服务器上获得新版本,工作完了再推送给中央服务器.缺点是必须联网使用,效率低. 分布式版本控制系统,没有中央服务器,每个人的电脑都是一个完整的版本库,工作的时

版本控制Git实际开发笔记

这里会把自己实际工作当中用到的git操作记录下来,供自己学习: ①新建分支: 在新版本要开发时,会基于最新版本新建一个分支,创建步骤如下: 新建本地分支[注意:这时只存在于本地,远程仓库还没有生成]: 然后切换到新建的本地分支: [说明]:以上两部操作可以合成一个命令:git checkout -b developer_V1.3.0 最后push到远程: 最后去网页中就能看到远程新建了这个分支了: ②删除远程分支: git branch -r -d origin/branch-namegit p

GIT -&gt; git rev-parse 笔记

显示分支 $git rev-parse --symbolic --branches 显示里程碑 $git rev-parse --symbolic --tags 显示引用 $git rev-parse --symbolic --glob=refs/* refs/heads/master refs/remotes/origin/HEAD refs/remotes/origin/master 显示SHA1值 $git rev-parse HEAD $git rev-parse master refs

git 的一些笔记

git config git config存在三个地方 :1./.git/config 项目级别2.~/.gitconfig 用户级别3./etc/gitconfig 系统级别 git config -e 查看项目级别的配置git config -e --global 查看用户级别的配置git config -e --system 查看系统级别的配置 添加git用户配置git config user.name “test”git config user.email “[email protect

学习使用Git 版本控制 代码管理

Git 版本控制 学习教程 Git版本控制器,可以作为程序员.计算机科学和软件工程的研究人员在编写代码.工程开发过程中的文件管理和代码管理的工具.在基本的Git Bash和Git GUI之外,有很多在MacOS.Linux和Windows下的Git 管理工具以可视化的方法辅助版本控制和代码控制. 在我的实际工作和学习中,需要用到Git实现本地代码的版本管理和代码控制,在坚果云上进行代码同步和迁移,使得实验室的台式机和个人笔记本上都有最新版的代码,并且可以记录每天修改和新增代码的进度. 由于jav

Git 学习之Git 基础(二)

Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置:开始或停止跟踪某些文件:暂存或提交某些更新.我们还会展示如何让 Git 忽略某些文件,或是名称符合特定模式的文件:如何既快且容易地撤消犯下的小错误:如何浏览项目的更新历史,查看某两次更新之间的差异:以及如何从远程仓库拉数据下来或者推数据上去. 取得项目的 Git 仓库 有两种取得 Git 项目仓库的

Git学习 -- 自定义Git

忽略特殊文件 在工作区创建.gitignore文件,编写内容 # Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: 忽略Python编译产生的.pyc..pyo.dist等文件或目录 *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa 然后add和commit该文件 此后当工作区出现.gitignore中类型文件时,git