四、Git分支
1、使用分支
查看分支
#查看分支
$ git branch
创建分支
#创建分支
$ git branch 分支名称
#修改分支名称
$ git branch -m 修改分支名称
切换分支
#切换分支
$ git checkout 要切换的分支名
Git分支推送到远程仓库分支
切回cat分支下创建brance.info文件查看情况
切回master分支下查看分支情况
2.对分支的误解和合并分支
Git分支:Git中的分支不是通过复制目录或者文件来进行改动形成的,它就是一个指标、一张贴纸、贴在某个commit上而已
合并分支
#合并分支
$ git merge 要合并的分支名
切换分支Git做了什么
主要做两件事
- 更新暂存区和工作区目录
- 变更HEAD的位置
合并过的分支需要保留嘛
合并后,原本没有内容都有了,分身就没有利用价值可以凭个人喜好,想删就删了
3.删除分支
删除本地仓库
#删除本地分支
$ git branch -d cat
#如果删除不掉强制删除-d变为-D
-d删除本地分支
注:如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D
不小心把没合并的分支删除了,怎么拯救
合并过的分支想留就留、想删就删,Git的分支并不是复制文件到某个目录,所以不会因为删掉分支文件就不见了
注:但如果删除的是还未合并的分支就不一样了
cat分支是从master分支出去的,当前领先master分支两次Commit,而且还没有合并过,这时如果试着删除cat分支,他会合并这个分支还没有全部合并哦
$ git branch -d cat
error: The branch 'cat' is not fully merged.
If you are sure you want to delete it, run 'git branch -D cat'.
上面不是已经删除cat分支了吗,怎么还在?这里再次跟大家说明一下分支的概念:分支只是一个指向某个Commit的指标,删除这个指标并不会使那些Commit消失。
git branch new_cat 276ba62
注意:这个命令"请帮我创建一个叫做new_cat的分支,让它指向17b23n3这个Commit",也就是在拿一张贴纸贴回去。
git branch
切换过去看看
git checkout new_cat
确认一下文件列表
ls -al
删除远程仓库分支
4.分支综合练习
在工作中,为实现某个新的需求,创建一个分支(dev),在这个分支上开展工作,正在此时,你需要按照如下方式处理:
- 切换到你的线上分支(master)
- 为这个紧急任务新建一个分支(fix),并在其中修复它
- 在测试通过之后,切换回线上分支(master)
- 然后合并这个修补分支(fix),最后将改动推到线上分支(master)
- 切换回你最初工作的分支上(dev)继续工作
#创建dev分支
$ git branch dev
#切换分支
$ git checkout dev
#创建UserDao.java文件
#在dev分支开发一些新的功能
public class UserDao{}
#提交dev分支的文件
$ git add UserDao.java
$ git commit -m "add userdao.java in dev branch"
#切换master分支
$ git checkout master
#创建新的修复分支fix
$ git branch fix
#切换fix分支
$ git checkout fix
#修复问题
$ vim a.info
#提交修改文件到本地仓库
$ git commit -a -m "fix update a.info"
#切换master分支
$ git checkout master
#合并分支
$ git merge cat
#推送到线上分支
$ git push
#切换到dev分支
$ git checkout dev
5.合并分支冲突问题
有时候合并操作不会如此顺利。如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git就没办法合并它们,同时会提示文件冲突。
演示冲突
$ git merge b1
Auto-merging a.txt
CONFLICT(冲突) (content): Merge conflict in a.txt
Automatic(自动合并) merge failed; fix conflicts and then commit the result.
查看文件内容
<<<<<<< HEAD
#master up=======
# b1 up
>>>>>>> b1
解决冲突
修改冲突文件
注意:
手动保留自己需要的内容,删除不要的内容
提交文件
$ git add a.txt
$ git commit -m "test"