使用git(二)分支切换与合并
2016-09-10 23:18
381 查看
本来总结自极客学院git系列视频教程地址
2.git tag:用给定的一个commit做标记
3.git checkout:在不同分支间进行切换
4.git stash:在切换分支前保存本地的修改
5.git merge:合并分支
(分支即是commit的不同引用,在这些分支上,会产生各自的历史。
分支切换即为HEAD引用的一个移动,以及暂存区与工作区的还原。)
我们用git branch 来创建一个新的分支。此时命令行提示中,还是处于原来的master分支上,这时我们需要使用 git checkout 来切换分支
我们在新的分支上做一些修改(创建文件并提交)
做完上述修改后,我们再切换回master分支,查看master.txt文件,发现,刚才在test分支上所做的修改都没有了。
我们在每个分支上所做的修改都是独立的,不会影响到其他分支。
切换分支的时候,会使用分支上最新的提交来还原暂存区和工作区,这样就可以在不同分支间独立的做我们想做的工作,并且可以再个分支间做无缝的来回切换。
分支名师当前分支的最新提交的那个commit的引用。
分支每提交一次,它就指向最新的那个提交。
那么,如何让一个引用指向一个固定的提交呢?
比如,一些提交是做版本release的,当一个release发生错误时,我们能根据这个引用,轻松地切换回那个提交,而不是去查看历史记录然后再去修改。我们可以使用tag来完成。
1.轻量级:只是本地的引用
2.带注解:实际上是git tag对象,存储在git仓库中,当你需要的时候,可以推送到服务器共享。
我们来查看一下当前历史
看到有3个提交以及指向这些提交的引用,一个test分支,一个HEAD标签,指向master分支。
现在,我们对master分支上的第一个提交(22dcf2c)做一个轻量级的tag。
其中“vo”为tag名称,现在,我们对master分支上的第一个提交(22dcf2c)做一个轻量级的tag。
22dcf2c为hash(一个5-7位的hash就够表示一个git对象了,git会帮我们自动不起其余的)。
若不指定hash,则默认使用当前指向的commit,即此时HEAD指向的master分支。
2.创建带注解的tag
一般用大谢来标注这些tag,这时会提示我们输入一些tag信息
3.使用 git tag 来查看当前tag列表
4.git show tagName
当再次查看commit信息时,我们发现,这些commit上多了两个tag,分别是
tag: v0 和 tag: INITIAL_COMMIT
用git show 来查看tag的具体信息
可以看到,v0实际上直接指向了一个commit,也就是22dcf2chege commit
而INITIAL_COMMIT实际上是一个tag对象,指向22dcf2c这个commit
这里提示我们处于一种“detached HEAD”的状态,也就是说,HEAD直接指向了一个commit,而不是一个分支名,此时若我们继续在当前分支下工作,当切换到其他分支时,前面所做的修改的历史记录可能就被丢弃了。这时可以使用:git checkout -b new_branch_name (new_branch_name 为新的分支名)来用当前的commit创建一个分支,并且切换到这个分支页面。它实际上是git branch 和git checkout的一个组合。
git checkout -b new_v0;
切换到new_v0分支,其实实际上它指向的还是原来那个v0 tag,此时便可以继续工作了。
提示我们本地的一些修改还没有被提交,若梅提交这些修改,在checkout时就会被覆盖,妖气commit或者把它们stash起来。我们使用git stash 命令
1.保存暂存区
使用 -a 参数来说明 保存暂存区, “stash1”是stash的信息。
执行完该命令后,使用git status查看状态,发现暂存区与工作区都原来的历史一样了。
2.还原暂存区
使用git stash list 查看当前stash列表
里面有一个stash0的引用,它指向了我们之前的stash。
在切换到别的分支完成工作后,再切换回原来的分支时,需要把存储的东西还原出来
用 –index 表示还原暂存区,stash@{0} 为stash的引用,若不加上stash的引用,则默认使用栈顶的引用。
此时master.txt文件已经在暂存区准备提交了,查看master.txt文件,发现添加的stash one信息也在里面,说明stash已经成功地被还原到暂存区与工作区了,这事我们就可以继续进行原来的工作了。
在执行stash pop命令后,stash list 被清空(即 stash#{0}),若需要保存stash,可以使用:
git stash apply –index stash@{0}
1.fast-farword merge
2.non-fast-farword merge
fast-forward merge
在某个时间点,我们得把分支上的工作合并到我们需要的一个分支上,这样分支上做的工作才有意义。
首先,我们切换回master分支,然后用master指向的commit来创建一个分支,并切换到该分支。
然后修改master.txt文件,并将其提交到历史记录中,查看历史记录的树状图,我们发现,test_merge指向的commit实际上是master指向的commit锁衍生出来的。
切换回master分支,合并test_merge
此时,提示我们这是一个“fast-forward”的merge,也就是说,这个merge的操作和merge的内容都是它当前指向的commit所衍生出来的一些commit,这样的一个merge,并不需要新的提交,只需把工作区与暂存区回复到test_merge上的一个状态,然后把master指向test_merge所指向的呢个merge就可以了。
non-fast-forward merge
合并master与test
它会自动帮我们把文件合并,提示我们在test下的修改与test_merge下的修改有冲突,我们需要将冲突处理完后再将它添加到暂存区,也可以使用git merge –abort来放弃此次的合并。
这种merge与第一种“fast-forward”的不同之处在于,它增加了一个commit来曾在这个merge的信息。
本地分支与合并的主要命令:
1.git branch:创建分支2.git tag:用给定的一个commit做标记
3.git checkout:在不同分支间进行切换
4.git stash:在切换分支前保存本地的修改
5.git merge:合并分支
一、分支切换的概念
当我们有一些其他的工作,不想直接在master分支上做的时候(例如,增加一些新的特性,或者做问题的修改和测试等),这是我们就需要新的一个分支。(分支即是commit的不同引用,在这些分支上,会产生各自的历史。
分支切换即为HEAD引用的一个移动,以及暂存区与工作区的还原。)
我们用git branch 来创建一个新的分支。此时命令行提示中,还是处于原来的master分支上,这时我们需要使用 git checkout 来切换分支
我们在新的分支上做一些修改(创建文件并提交)
做完上述修改后,我们再切换回master分支,查看master.txt文件,发现,刚才在test分支上所做的修改都没有了。
我们在每个分支上所做的修改都是独立的,不会影响到其他分支。
切换分支的时候,会使用分支上最新的提交来还原暂存区和工作区,这样就可以在不同分支间独立的做我们想做的工作,并且可以再个分支间做无缝的来回切换。
分支名师当前分支的最新提交的那个commit的引用。
分支每提交一次,它就指向最新的那个提交。
那么,如何让一个引用指向一个固定的提交呢?
比如,一些提交是做版本release的,当一个release发生错误时,我们能根据这个引用,轻松地切换回那个提交,而不是去查看历史记录然后再去修改。我们可以使用tag来完成。
二、tag的使用
tag分类
tag分为轻量级tag和annot带注解的tag1.轻量级:只是本地的引用
2.带注解:实际上是git tag对象,存储在git仓库中,当你需要的时候,可以推送到服务器共享。
我们来查看一下当前历史
看到有3个提交以及指向这些提交的引用,一个test分支,一个HEAD标签,指向master分支。
tag的创建
1.创建轻量级tag现在,我们对master分支上的第一个提交(22dcf2c)做一个轻量级的tag。
git tag "v0" 22dcf2c
其中“vo”为tag名称,现在,我们对master分支上的第一个提交(22dcf2c)做一个轻量级的tag。
22dcf2c为hash(一个5-7位的hash就够表示一个git对象了,git会帮我们自动不起其余的)。
若不指定hash,则默认使用当前指向的commit,即此时HEAD指向的master分支。
2.创建带注解的tag
git tag -a "INITIAL_COMMIT" 22dcf2c
一般用大谢来标注这些tag,这时会提示我们输入一些tag信息
3.使用 git tag 来查看当前tag列表
4.git show tagName
当再次查看commit信息时,我们发现,这些commit上多了两个tag,分别是
tag: v0 和 tag: INITIAL_COMMIT
用git show 来查看tag的具体信息
可以看到,v0实际上直接指向了一个commit,也就是22dcf2chege commit
而INITIAL_COMMIT实际上是一个tag对象,指向22dcf2c这个commit
三、分支切换checkout
当需要回到那些tag时,也可以直接使用tag名切换,因为它们实际上也是指向了一个提交。如:git checkout v0这里提示我们处于一种“detached HEAD”的状态,也就是说,HEAD直接指向了一个commit,而不是一个分支名,此时若我们继续在当前分支下工作,当切换到其他分支时,前面所做的修改的历史记录可能就被丢弃了。这时可以使用:git checkout -b new_branch_name (new_branch_name 为新的分支名)来用当前的commit创建一个分支,并且切换到这个分支页面。它实际上是git branch 和git checkout的一个组合。
git checkout -b new_v0;
切换到new_v0分支,其实实际上它指向的还是原来那个v0 tag,此时便可以继续工作了。
四、切换分支前保存本地修改
有时,我们修改了工作区去暂存区,比如,我们修改了master.txt文件的内容,并将其添加到暂存区,此时,如果我们切换回master分支,会提示报错。提示我们本地的一些修改还没有被提交,若梅提交这些修改,在checkout时就会被覆盖,妖气commit或者把它们stash起来。我们使用git stash 命令
1.保存暂存区
git stash save -a "stash1"
使用 -a 参数来说明 保存暂存区, “stash1”是stash的信息。
执行完该命令后,使用git status查看状态,发现暂存区与工作区都原来的历史一样了。
2.还原暂存区
使用git stash list 查看当前stash列表
里面有一个stash0的引用,它指向了我们之前的stash。
在切换到别的分支完成工作后,再切换回原来的分支时,需要把存储的东西还原出来
git stash pop --index stash@{0}
用 –index 表示还原暂存区,stash@{0} 为stash的引用,若不加上stash的引用,则默认使用栈顶的引用。
此时master.txt文件已经在暂存区准备提交了,查看master.txt文件,发现添加的stash one信息也在里面,说明stash已经成功地被还原到暂存区与工作区了,这事我们就可以继续进行原来的工作了。
在执行stash pop命令后,stash list 被清空(即 stash#{0}),若需要保存stash,可以使用:
git stash apply –index stash@{0}
查看stash list:`git stash list` 删除一个stash:`git stash pop stash@{0}` 一次性清理所有stash:`git stash clear`
五、合并分支
分支合并分为两种:1.fast-farword merge
2.non-fast-farword merge
fast-forward merge
在某个时间点,我们得把分支上的工作合并到我们需要的一个分支上,这样分支上做的工作才有意义。
首先,我们切换回master分支,然后用master指向的commit来创建一个分支,并切换到该分支。
然后修改master.txt文件,并将其提交到历史记录中,查看历史记录的树状图,我们发现,test_merge指向的commit实际上是master指向的commit锁衍生出来的。
切换回master分支,合并test_merge
此时,提示我们这是一个“fast-forward”的merge,也就是说,这个merge的操作和merge的内容都是它当前指向的commit所衍生出来的一些commit,这样的一个merge,并不需要新的提交,只需把工作区与暂存区回复到test_merge上的一个状态,然后把master指向test_merge所指向的呢个merge就可以了。
non-fast-forward merge
合并master与test
它会自动帮我们把文件合并,提示我们在test下的修改与test_merge下的修改有冲突,我们需要将冲突处理完后再将它添加到暂存区,也可以使用git merge –abort来放弃此次的合并。
这种merge与第一种“fast-forward”的不同之处在于,它增加了一个commit来曾在这个merge的信息。
相关文章推荐
- git基本使用 创建切换合并分支以及提交本地分支至远程分支
- git基本使用(2)创建切换合并分支以及提交本地分支至远程分支
- git 新建分支/切换分支/合并分支 使用方法
- Eclipse下svn的创建分支/合并/切换使用
- Eclipse下svn的创建分支/合并/切换使用
- git 版本退回 分支切换与合并
- Eclipse下svn的创建分支/合并/切换使用
- Eclipse下svn的创建分支/合并/切换使用
- SVN的分支,切换和合并的使用
- Git 简单操作(拉取,推送 ,合并分支,切换分支)
- GIT初学使用(二)- 实验分支的内容如何合并到主分支中
- SVN之——Eclipse下svn的创建分支/合并/切换使用
- 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题
- Git的使用十一(创建与合并分支)仅限Mac亲测
- git 使用详解(9)-- 分支的新建与合并
- git 的使用(5)-git的分支管理以及合并冲突解决
- Eclipse下svn的创建分支/合并/切换使用
- Eclipse下svn的创建分支/合并/切换使用
- Git分支 -新建,切换,删除,合并
- 使用GIT合并分支: git-merge and git-pull