【第一步】:理解Git是怎么保存文件
【第二步】:理解Git在本地仓库的分支操作
【第一步】:理解Git是怎么保存文件
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。通过下面第一次commit过程和第二次commit过程了解Git保存文件的过程。
有3个文件(README mit对象:包含着指向树对象的指针和所有提交信息
设置commit对象的parent指针,指向上次commit对象(父对象)。
【第二步】:理解Git在本地仓库的分支操作
【1】关于分支的一些术语说明
1.它会在每次的提交操作中自动向前移动,指向最后那个提交对象
2.Git 的 “master” 分支并不是一个特殊分支。 它跟其它分支完全没有区别。
之所以几乎每一个仓库都有 master 分支,是因为 git init命令默认创建它,并且大多数人都懒得去改动它。
1.与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样;
2.master 是运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用;
1.分支是版本控制系统的一个特性,把新功能从主线版本分离出来,很多版本控制系统是创建源代码的副本,对于大项目这个会非常耗时。
2.Git的分支模型,在新建分支的操作几乎是瞬间完成的,同时切换分支也非常便捷。
3.Git 的分支,其实本质上仅仅是指向提交对象的可变指针。
注:如果本地暂存区内有内容(即,你运行过git add命令,或者使用git status查看,存在绿色文件),则会切换失败,需要提交暂存区内容或者将暂存区内容丢弃,才能切换。
注:也有可能创建失败,理由同切换分支功能。
其实这个命令是一个组合命令:
第一个develop是要创建的本地分支名称,origin是远程仓库名称,第二个develop是远程分支名称
当从远程拉取内容时,直接使用git pull即可,不需要指定远程仓库和分支名称
当从本地向远程推送内容时,直接使用git push即可,不需要指定远程仓库和分支名称
可以通过git remote -v列出多个远程仓库的别名和地址
origin是远程仓库名称,第一个develop是远程分支名称,第二个develop是本地创建的分支名称
当从远程拉取内容时,直接使用git pull即可,不需要指定远程仓库和分支名称
当从本地向远程推送内容时,直接使用git push即可,不需要指定远程仓库和分支名称
将远程仓库的所有分支的最新修改,全部取回到本地
将远程仓库指定分支的最新修改,取回到本地
由于远程分支与本地分支名称相同,则可以简化为
当设置了本地分支对应关联的远程分支时,又可以简化为
git pull命令是一个组合命令,相当于
当你设置本地分支和远程分支相同名称,并且设置了关联关系(就是追踪关系tracking),则这三个命令效果相同
rebase中间态可执行的操作
发生冲突后,使用git status可以查看到冲突文件是红色字体显示的。打开文件,冲突部分会有特定表示如下
冲突发生前,没有进行合并时,当前位置的代码
用户需要根据具体业务删除或者保留对应的代码,同时将<< HEAD == >> 这些标示去掉。
有时>>>>>>>后面会跟一些描述信息,比如分支名称、提交时的注释等等。
!!需要谨慎使用的一些命令
git branch -D <要删除的分支名称> 强制删除,即便没有被合并到主分支
git branch -d <要删除的分支名称> 非强制删除,如果没有被合并到主分支,则无法删除
注:替换之后,则该文件再也找不回来了,需谨慎使用!
注:清除之后,则该文件再也找不回来了,需谨慎使用!
注:撤销后,指定版本之后的所有提交都会被撤销,并回退到当前工作目录,执行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)使用git checkout切换到需要紧急修复的分支
(6)使用git status查看合并是否产生冲突
(7)使用git push推送修改到远程仓库
本文参考最后的几篇文章,将git的分支管理整理如下。学习git的分支管理将可以版本进行灵活有效的控制。