课程地址:【【git&github】入门教程,必学!】 https://www.bilibili.com/video/BV1cE411G7yc/?share_source=copy_web&vd_source=b1cb921b73fe3808550eaf2224d1c155
目录
2 Git进阶
2.1 分支
2.1.1 分支细分
2.1.2 分支命令
1查看分支
2 创建分支
3 切换分支
4 合并分支
5 删除分支
2.2 暂时保存更改
2 Git进阶
2.1 分支
为便于理解,暂时可以认为分支就是当前工作目录中代码的一份副本。
使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。
比如在一个分支上开发新功能,在另一个分支上修复bug。
2.1.1 分支细分
1 主分支(master):第一次向git仓库提交更新记录时自动产生的一个分支。
当第一次向git仓库提交项目状态时,git会自动产生一个以时间点分隔的线,这条线就是分支。
分支上每一个时间点都代表一次git提交。
git自动产生的这条分支叫做主分支,master就是主分支的名字。
2 开发分支(develop):作为开发的分支,基于master分支创建
git中,除了主分支以外,还可以基于主分支创建其他分支。
为什么要创建其他分支?创建其他分支,可以让我们从开发主线分离出来,以免影响开发主线。
在实际开发过程中,一定要保持开发主线的稳定性,也就是保持主分支中代码的稳定性。
主分支的代码一般是用于向外界发布的代码,所以一般开发工作不会在主分支上进行。
在开发过程中,都会创建一条开发分支,当功能在开发分支上完成之后,经过测试没有问题,再将开发分支的代码合到主分支上。
开发分支可以理解为主分支的副本,功能在副本上开发,开发完成后将副本中的代码拷贝到主分支上。
开发工程中,分支与分支之间是独立的,互不影响。
3 功能分支(feature):作为开发具体功能的分支,基于开发分支创建
在实际过程中,除了主分支和开发分支外,还会有功能分支。
功能分支基于开发分支创建,作用是开发一个独立的功能。
当功能开发完成后,将功能分支的代码合并到开发分支,此时功能分支就可以删除了。
当开发分支的功能累积到一定程度,将开发分支的代码合并到主分支上。
即具体的功能在功能分支上进行,具体的功能在功能分支上开发完成后,要将功能分支合并到开发分支。开发分支的功能累积到一定程度后,最终将开发分支合并到主分支。
为什么要这样做?因为开发分支也要保持最大程度的稳定性。
4 分支的其他功能
分支还可以存储不同软件的版本,比如jQuery,有1.0,2.0和3.0等版本。
不同版本的jQuery可以放在不同分支中分别开发。
2.1.2 分支命令
查看分支:git branch
创建分支:git branch 分支名称
切换分支:git checkout 分支名称
合并分支:git merge 来源分支
删除分支(分支被合并后才允许删除 -D 强制删除):git branch -d 分支名称
强制删除分支: git branch -D 分支名称
实践
1查看分支
git branch
查看分支
在当前仓库中有一个默认分支,master主分支。
master 是第一次向git仓库中提交项目状态时,git程序自动创建的。
* master,*表示当前处于master分支上。
如果存在多个分支,其他分支处于未选中的状态,那么分支的颜色是白色的,且分支名称前没有星号*
此外,git程序中工作目录后的括号,括号中显示的就是当前所在分支的分支名称。
2 创建分支
git branch 分支名称
创建分支,分支名称是自定义的。
注意:当前在哪个分支上进行的操作,就是在哪个分支上创建分支,相当于基于哪个分支创建副本
下面的命令含义就是基于master分支创建develop分支。
查看分支
现在分支列表中已经存在develop分支了。(现在仍然处于master主分支上)
3 切换分支
git checkout 分支名称
切换分支
现在已经切换到develop分支上了。
此时develop分支已经是绿色字体,且前有星号*,且工作目录后面的括号中也显示develop。
注意:切换分支之前,当前分支的工作已经要提交到git仓库中,保持当前分支的工作区是完全干净的状态,否则会出现问题。
在开发分支上创建的文件,在主分支上就不应该看到。
4 合并分支
git merge 来源分支
合并分支
场景:如果在当前分支上的工作已经完成,则可以将当前分支合并到其他分支中去。
实践:将开发分支合并到主分支上。
步骤1 切换到主分支上(站在主分支的角度合并开发分支)
步骤2 git merge 被合并的分支名称
注意:虽然这里将开发分支合并到主分支上,但是开发分支还是存在的。合并完成后,可以切换回开发分支,在开发分支上继续开发。
看一下合并分支的提示。
5 删除分支
git branch -d 分支名称
删除分支
如果某个分支上的工作已经完成,且这个分支不需要继续存在,此时可以删除这个分支。
d是delete的缩写。
实践
注意:如果要删除的分支没有被合并,那么默认这个分支是不能被删除的。这是git程序对分支的保护机制。防止开发人员误删文件。
如果这个分支真的没有合并,就是不需要了,可以强制删除。命令:git branch -D 分支名称。
实践:1 创建一个新分支;2 切换到这个新分支;3 在新分支上提交代码;4 切换到其他分支;5 强制删除这个新分支。
注意:如果要删除分支A,那么当前所处的分支不能是分支A。
2.2 暂时保存更改
2.1.2 说过在切换分支前,要将当前分支的所有改动提交才能切换分支,否则就会出现问题。
但是实际的开发过程中,经常遇到正在开发新功能,但此时测试过来说之前开发过的功能存在严重bug,必须要立即修复。
但是当前分支上的新功能还未开发完成,此时不想提交然后切换到新分支上修改bug。
遇到以上场景该怎么解决?
在git中,可以暂时提取分支上的所有改动并存储,让开发人员得到一个干净的工作副本(也就是说一个不存在任何改动的工作目录,然后就可以随意切换分支了),临时转向其他工作。
当修改完bug后,切换回原来的分支,就可以将刚才的改动恢复回来,然后继续开发新功能。
git提供了储藏功能。可以理解为剪贴板,可以提取分支上所有的改动并将改动保存起来。
使用场景:分支临时切换
存储临时改动:git stash
恢复改动:git stash pop
一旦所有的改动被恢复,那么剪贴板上就不存在这些改动。
注意:git的储藏功能是独立于分支的。即在其他分支上也可以执行储藏命令。如果其他分支上执行此命令,就会将这个改动恢复到其他分支上。所以执行命令前要搞清楚当前所在的分支是什么。
实践
1 创建新分支并切换到新分支上
2 将新分支上的改动add到暂存区
此时text分支有改动,不是一个干净的工作目录。此时是不能切换分支的。如果切换分支,text.html就会被携带到其他分支上(前提是text.html存到暂存区)。text.html提交后才能切换分支。但是有的时候不想提交,因为此时text.html上的工作没有完全完成。
stash命令,将当前分支上所有的命令先剪切出来,存到git提供的剪贴板。
实践
执行git stash,此时text分支上的改动就被存到剪贴板上了。命令行也给出了,工作目录已保存。
使用git status查看当前工作区的状态。
On branch text —— 此时处于text分支上。
Nothing to commit,working tree clean —— 没有什么可以提交,工作区是干净的状态。
此时就可以切换分支了。
切换到master分支,此时没有text.html文件。
然后再切换回text分支,执行git stash pop,text.html就回来了。