git学习之分支
Git是目前最先进的分布式版本控制系统,常被用于代码版本管理。在实际使用中,分支是Git一个十分常用的特性,相较于其他版本控制系统(Version Control System, VCS ),git的分支管理十分轻量且快速。这主要得益于其底层的设计,很多旧的VCS的分支是对某个版本的整个拷贝,因此新增、删除、更改分支的速度十分缓慢;而Git的分支实际上是一个指向某个版本的指针,对分支的增删改操作就相当于对指针的增删改,因此十分快速轻量。
git是分布式的,每一份clone都是一个完整的版本库,因此可以把当前设备上的clone称为本地,而其他设备上的clone称为远程。但在实际协作时,并不会直接与同伴的电脑互为远程来同步代码,而是有一台“中央服务器”作为大家共同的远程,方便存储并交换大家的修改,像github、gitlab、gitee等网站就是提供了这种基于Git的远程托管服务。
本地分支就是本地Git仓库里的一个指针,指向某个提交
远程分支是远程仓库里的一个指针,指向远程仓库中的某个提交
远程引用是本地对远程的引用,包括分支、标签等等。
远程跟踪分支就是本地对远程分支的引用,是本地的一个指针,一旦进行了网络通信,git就会移动它们以精确地反应远程分支的状态。远程跟踪分支的命名形式为
跟踪分支是让本地的一个分支branchA
与远程跟踪分支origin/branchB
关联起来,这样在本地的branchA
上执行git push/pull
时,git就知道了该推送/拉取远程的哪个分支了。
常用操作
- 新建一个本地分支
feature1
。即在当前版本上新建一个分支,也就是新增一个指向当前版本的指针
git branch feature1
- 切换到
feature1
分支。改变HEAD的指向至对应的分支;HEAD是git中一个特殊的指针,它永远指向本地的当前活跃分支,因此在本地切换分支就相当于改变HEAD的指向。
git checkout feature1
- 新建并切换到分支feature1,操作1和2可以合并成一个步骤
git checkout -b feature1
- 还可以将feature1推送到远程
git push origin feature1
这样远程就会新增一个名为feature1的分支,并且本地的feature1会自动跟踪远程的feature1
5.如果不想让远程的分支也命名为feature1
git push origin feature1:feature1_o
这个命令意为将本地的feature1分支,推送到远程,在远程的分支名为feature1_o
,并跟踪之
可以发现上个命令其实是git push origin feature1:feature1
的简化
- 合并分支。在feature1上做了一些修改提交后,还可以将提交merge到主分支
git checkout master // 先将当前分支切换为master
git merge feature1 // 再将feature1合并进当前分支
合并feature1上的提交后,如果想将这些提交同步到远程的master,则可以执行 git push origin master
将本地合并的提交推送到远程
- 在feature1分支合并后,还可以再删除分支feature1
git branch -d feature1
- 如果未执行合并便删除分支,git会提示错误
error:分支'feature1' 没有完全合并
,如确定要删除,可使用-D
强制删除
git branch -D feature1
- 同样也可以删除远程分支
git push origin :feature1_o
这里其实运用了个小技巧,将本地的“空”推送到远程的feature1_o
分支,也就是删除了远程feature1_o
分支