目录
前言
感谢尚硅谷提供的免费课程资源,让我们来进行git知识的学习吧。
1 初始Git
1.1 版本控制工具
-
集中式版本控制工具
CVS、SVN(Subversion)、VSS……
-
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
1.2 Git工作机制
②代码托管中心
代码托管中心负责维护远程库,让团队成员可以彼此协作。
- 局域网
Gitlab:如果有特殊需求不能使用外网的代码托管中心,可以在局域网内搭建自己的代码托管中心服务器。
- Internet
GitHub:国外网站,有非常多优秀的开源项目托管代码,但是从国内访问很慢。
码云:国内的代码托管中心,在国内互联网开发圈子中的地位举足轻重。
1.3 Git安装
高速下载链接:https://registry.npmmirror.com/binary.html?path=git-for-windows/
2 Git常用命令(本地库)
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名(查看谁提交的代码,必须首先设置) |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m"日志信息" 文件名 | 提交到本地库 |
git reflog | 查看版本信息 |
git log | 查看版本详细信息 |
git reset --hard 版本号 | 版本穿梭 |
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 |
Git底层工作原理
其实就是指针移动
3 Git分支
①什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时
候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)
②操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
③分支合并冲突
- 默认分支master下有一个hello.txt文件,hot-fix分支下也有hello.txt文件,而且在同一文件位置。当我们修改hot-fix分支下的hello.txt文件,master分支下没有修改时,在master分支下合并hot-fix分支,不会产生冲突。
- 当master分支下也修改了hello.txt文件,这时hot-fix分支和master分支进行合并时就会出现代码合并冲突。原因在于git不知道是将master分支下修改的作为修改后的还是将hot-fix分支下修改的作为修改后的。这个时候就会产生代码冲突,冲突产生的表现
后面状态为 MERGING。
具体理解可见下图。
这个时候就需要进行手动合并,即用户自己判断到底如何进行修改合并。
- 编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:
:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix hello git!- 添加到暂存区
- 执行提交(注意:此时使用git commit 命令时不能带文件名)
图解原理
master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD
决定的。所以创建分支的本质就是多创建一个指针。
HEAD 如果指向master,那么我们现在就在master 分支上。
HEAD 如果执行hotfix,那么我们现在就在hotfix 分支上。