掌握git
目录
一、基本概念
1.1 SVN与GIT对比
SVN优点
- 较好的权限管理,可以精确控制每个目录的权限;
- 相对于git操作比较简单;
SVN缺点
- 集中式,如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整文件;
- 分支功能弱
- 拷贝代码速度慢
- 必须联网使用
GIT优点
- 分布式,每个开发者的电脑上都有一个完整的仓库,不担心服务器问题;
- 不必联网使用,不联网也可以提交代码到本地仓库,可以查看以往的所有log,等到有网的时候,push到远程即可;
- 强大的分支管理功能
- Git的内容的完整性好: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
GIT缺点
- 权限管理不够精细。
1.2 GIT入门
git工作目录下面的所有文件分为两种情况:以跟踪和未跟踪。
已修改的文件也可以使用git add添加到暂存区,再修改后,可以用暂存区的文件还原(checkout),git add和git stage是同一个命令
1.3 安装
系统 | 方式 |
---|---|
Linux | yum install git-all 或者apt install git-all |
Mac | 通过安装Xcode命令行工具安装 |
Windows | 官网下载 |
源码 | 参考官方文档 |
1.4 配置
层级 | 文件位置 | 配置参数 |
---|---|---|
系统级 | /etc/gitconfig | --system |
用户级 | ~/.gitconfig 或者~/.config/git/config | --global |
仓库级 | .git/config |
配置用户身份
|
|
配置编辑器
|
|
检查个人配置
|
|
二、基础操作
git commit
创建一个新的提交记录
|
|
git branch
创建新的分支
|
|
git merge
合并分支
|
|
git rebase
合并分支-取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
|
|
git rebase相对于git merge来说,可以创造更线性的提交历史。
三、进阶操作
分离HEAD
HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
|
|
相对引用
通过指定提交记录哈希值的方式在 Git 中移动不太方便,所以 Git 引入了相对引用。
- 使用 ^ 向上移动 1 个提交记录
- 使用 ~
向上移动多个提交记录,如 ~3
|
|
撤销变更
|
|
在reset后,之前提交所做的变更还在,但是处于未加入暂存区状态。
|
|
整理提交记录
|
|
标签
|
|
HEAD无法指向tag
两个父节点
操作符 ^ 与 ~ 符一样,后面也可以跟一个数字。 但是该操作符后面的数字与 ~ 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个父提交。
|
|
父提交与当前提交连接的直线是main^1, 曲线是main^2
四、远程操作
git clone
本地创建一个远程仓库的拷贝
|
|
git fetch
git fetch 完成了仅有的但是很重要的两步:
- 从远程仓库下载本地仓库中缺失的提交记录
- 更新远程分支指针(如 o/main)
实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。不会改变本地仓库的状态.
git pull
git pull命令等于先后使用git fetch和git merge命令
|
|