这是我参与「第五届青训营 」笔记创作活动的第 7 天 。
一、知识点介绍
这篇笔记记录了Git的基本命令。
二、详细知识点
1.Git - 分布式版本控制
1)基本原理:
- 每个库都存有完整的提交历史,可以直接在本地进行代码提交
- 每次提交纪律的都是完整的文件快照,而不是记录增量
- 通过Push等操作来完成和远端代码的同步
2)优点
- 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体
- 分支管理功能强大,方便团队合作,多人协同开发
- 校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失
3)缺点
- 相对SVN更复杂,学习成本更高
- 对于大文件的支持不是特别好(git-Ifs工具可以弥补这个缺点)
2.git配置
- 基本指令
- ls/ll查看当前目录
- cat 查看文件内容
- touch 创建文件
- vi vi编辑器
1) 项目初始化
mkdir demo //创建文件夹
cd demo
ls
git init
.git内文件说明
- 查看文件内容
git cat-file -p 文件序列 - HEAD - 指向当前的分支
- config - 配置
- hooks
- objects - commit/tree/blob在git里统一称为Object,除此之外还有一个tag的object
- Blob 存储文件的内容
- tree 存储文件的目录信息
- commit 存储提交信息,一个commit可以对于唯一版本的代码
- refs 对应的Commit ID,因此把ref当作指针,指向对应的Commit来表示当前Ref对应的版本
- 不同种类的ref
refs/heads前缀表示的是分支,refs/tags前缀表示的是标签- branch分支一般用于开发阶段,是可以不断添加commit进行迭代的
- Tag标签一般表示一个稳定版本,指向的Commit一般不会变更
Tag
- 命令形式:
git tag v0.0.1 - 附注标签,一种特殊的tag,给Tag提供一些额外的信息
git tag -a v0.0.1 "附注信息"
2)git config
每个级别的配置可能重复,但是低级别的配置会覆盖高级别的配置
- 全局 --global
- 最高级别--system
- --local
用户名配置
git config --global user.name ""
git config --global 邮箱
git config --global --replace-all user.name "你的 git 的名称"
git config --global --replace-all uesr.email "你的 git 的邮箱"
Instead of 配置
git config --global url.git@github.com:.insteadOf http://github.com/
Git命令别名配置
git config --glocal alias.cin "commit --amend --no-edit" // cin = commit --amend --no-edit
也可以在用户目录下创建一个.bashrc文件,然后在文件内写入
alias git-log="git log --pretty=oneline --all --graph --abbrev-commit"
alias ll="ls -al"
3)git remote
git remote命令用于在远程仓库的操作
- 查看remote配置
git remote -v
- 添加remote
git remote add origin_ssh git@github.com:git.git
git remote add origin_http http://github.com/git/git.git
3.提交代码
1)git add
- 作用:将代码从工作区保存到暂存区
- 命令格式:
git add 单个文件名|通配符通配符.可以将当前目录下的所有文件进行add
2)git commit
- 作用:将代码从暂存区保存到本地仓库,变成了一次提交记录
- 命令格式:
git commit -m "注释内容"
3)查看修改的状态(status)
- 作用:查看修改的状态(暂存区、工作区)
- 命令形式:
git status
4)查看提交日志(log)
- 作用:查看提交记录
- 命令形式:
git log[option]- --all 显示所有分支
- --pretty=oneline 将提交信息显示为一行
- abbrev-commit 使得输出的commitID更简短
- --graph 以图的形式显示
5)版本回退
- 作用:版本切换
- 指令形式:
git reset --hard commitID- commitID可以使用
git log指令查看
- commitID可以使用
- 查看已经删除的记录:
git reflog这个指令可以看到已经删除的提交记录
Git GC
6)修改历史版本
7)忽略文件
在仓库中创建一个.gitignore文件,然后写入要忽略的文件和模式即可
8)分支
- 查看本地分支
git branch - 切换分支:
git checkout 分支名 - 创建本地分支
git checkout -b 分支名git branch 分支名
- 跟踪远端分支:
git branch 本地分支名(一般与远程分支保持一致) origin/远程分支名注意:创建分支后会将当前分支的文件全部复制到新分支里面去
- 删除分支
git branch -d 分支名删除分支时,需要做各种检查git branch -D 分支名不做任何检查强制删除
- 合并分支:
git merge 要合并到当前分支的分支名
9)配置SSH公钥
目前的Key的类型有四种,分别是dsa、rsa、ecdsa 、ed25519
- 默认使用的是rsa,由于一些安全问题,现在已经不推荐使用dsa和rsa了,优先推荐使用
ed25519 - 生成SSH公钥
ssh-keygen -t ed25519 -C "你的电子邮箱"
- 获取公钥
cat ~/.ssh/id_ed25519.pub
- 验证配置是否成功
ssh -T 输入公钥的网站
4.远端同步
1)拉取代码
① clone
- 使用情况:在远端已经有仓库的时候,将远端仓库克隆到本地
- 代码形式:
git clone 仓库路径 本地目录- 会自动到命令行当前的目录下创建
- 可以加上
-b来指定分支
② pull
- 拉取+合并
git pull 源名称 远端的分支名称
③ fetch
- 只拉取不合并
git fetch 源名称 远端的分支名称
2)推送代码 push
- 命令形式:
git push 源名称 本地分支名:远端分支名- 如果远端分支和本地分支名称相同,可以只写本地分支
git push --set-upstream 源名称 本地分支名:远端分支名可以在推送到远端的同时建立起与远端分支的联系,以后就直接在要推送的分支执行git push即可- 在push后使用
-f可以强制推送
- 在push后使用
- 查询关联关系可以使用指令
git branch -vv