git怎么理解git分支管理存在的意义


  • 【第一步】:理解Git是怎么保存文件

  • 【第二步】:理解Git在本地仓库的分支操作

    • 【1】关于分支的一些术语说明

【第一步】:理解Git是怎么保存文件

Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。通过下面第一次commit过程和第二次commit过程了解Git保存文件的过程。

有3个文件(README mit对象:包含着指向树对象的指针和所有提交信息
  1. 完全执行第一次commit过程;
  2. 设置commit对象的parent指针,指向上次commit对象(父对象)。


含此commit的所有目录结构以及文件的blob对象指针, 所以有了这些信息,Git就可以很快的恢复此版本的所有信息。

【第二步】:理解Git在本地仓库的分支操作

【1】关于分支的一些术语说明

1.它会在每次的提交操作中自动向前移动,指向最后那个提交对象
2.Git 的 “master” 分支并不是一个特殊分支。 它跟其它分支完全没有区别。 
之所以几乎每一个仓库都有 master 分支,是因为 git init命令默认创建它,并且大多数人都懒得去改动它。
  • 【HEAD】 : 它是Git中的一个指针,指向当前所在的本地分支(将 HEAD 想象为当前分支的别名)。
1.与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样; 
2.master 是运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用;
1.分支是版本控制系统的一个特性,把新功能从主线版本分离出来,很多版本控制系统是创建源代码的副本,对于大项目这个会非常耗时。
2.Git的分支模型,在新建分支的操作几乎是瞬间完成的,同时切换分支也非常便捷。
3.Git 的分支,其实本质上仅仅是指向提交对象的可变指针。
  1. 新建分支testing,切换到分支,上传分支到远程仓库:
###上面两种方法效果一样 # 此命令执行完成后,分支情况如图4

2,切换到(已经存在的)指定分支

注:如果本地暂存区内有内容(即,你运行过git add命令,或者使用git status查看,存在绿色文件),则会切换失败,需要提交暂存区内容或者将暂存区内容丢弃,才能切换。

3,以本地当前分支为起点,创建新分支

注:也有可能创建失败,理由同切换分支功能。

4,以本地当前分支为起点,创建新分支并切换到新分支

其实这个命令是一个组合命令:

5,以远程仓库的远程分支为起点,创建新分支并切换到新分支

第一个develop是要创建的本地分支名称,origin是远程仓库名称,第二个develop是远程分支名称

当从远程拉取内容时,直接使用git pull即可,不需要指定远程仓库和分支名称

当从本地向远程推送内容时,直接使用git push即可,不需要指定远程仓库和分支名称

可以通过git remote -v列出多个远程仓库的别名和地址

6,将本地分支与远程分支设置关联(追踪tracking)

origin是远程仓库名称,第一个develop是远程分支名称,第二个develop是本地创建的分支名称

当从远程拉取内容时,直接使用git pull即可,不需要指定远程仓库和分支名称

当从本地向远程推送内容时,直接使用git push即可,不需要指定远程仓库和分支名称

7,查看本地分支与远程分支的追踪关系

8,合并其他分支到当前分支

9,从远程仓库拉取内容

将远程仓库的所有分支的最新修改,全部取回到本地

将远程仓库指定分支的最新修改,取回到本地

10,拉取远程仓库的远程分支,并合并到当前分支中

由于远程分支与本地分支名称相同,则可以简化为

当设置了本地分支对应关联的远程分支时,又可以简化为

git pull命令是一个组合命令,相当于

当你设置本地分支和远程分支相同名称,并且设置了关联关系(就是追踪关系tracking),则这三个命令效果相同

rebase中间态可执行的操作

1,有可能产生冲突的命令

发生冲突后,使用git status可以查看到冲突文件是红色字体显示的。打开文件,冲突部分会有特定表示如下

冲突发生前,没有进行合并时,当前位置的代码

用户需要根据具体业务删除或者保留对应的代码,同时将<< HEAD == >> 这些标示去掉。

有时>>>>>>>后面会跟一些描述信息,比如分支名称、提交时的注释等等。

!!需要谨慎使用的一些命令

git branch -D <要删除的分支名称> 强制删除,即便没有被合并到主分支

git branch -d <要删除的分支名称> 非强制删除,如果没有被合并到主分支,则无法删除

2,替换掉工作目录中的某一个文件,放弃对它的所有修改,将该文件更新到最近的一次提交版本

注:替换之后,则该文件再也找不回来了,需谨慎使用!

3,清除暂存区内的指定文件的暂存内容

注:清除之后,则该文件再也找不回来了,需谨慎使用!

4,撤销提交到指定的版本

注:撤销后,指定版本之后的所有提交都会被撤销,并回退到当前工作目录,执行git status可以看到,所有已修改的文件都是红色字体显示

注:3,4可以使用git reflog查看改动日志

(1)工作之前使用git branch查看当前分支,使用git status查看我们工作目录中是否有未提交的修改,使用git diff查看我们都修改了哪些内容

(2)使用git pull或者git fetch 、git merge命令将远程内容拉取到本地,并合并到当前分支中

(3)使用git add将我们的修改添加到暂存区内,使用git commit提交本次修改(注意使用-m添加提交说明)

(5)使用git pull拉取远程分支的修改

(6)使用git push推送本次修改

2,不能快速解决的任务,或者需要紧急修复的bug

(2)使用git checkout切换到需要紧急修复的分支

(6)使用git status查看合并是否产生冲突

(7)使用git push推送修改到远程仓库

本文参考最后的几篇文章,将git的分支管理整理如下。学习git的分支管理将可以版本进行灵活有效的控制。



我要回帖

更多关于 git切换分支 的文章

 

随机推荐