概念
Git诞生
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!
集中式
集中式版本管理包括CVS及SVN等
- 需要一台中心服务器保存核心版本,每一台工作电脑向核心服务器推送自己的更改
- 必须要联网工作
- 容错性差
分布式
分布式版本管理Git
- 每台电脑平等的保存一个仓库和若干分支,但一般也有一台中心服务器充当交换角色
- 不需要联网工作
- 容错性好
- 分支管理方便
仓库
版本库又名仓库,英文名repository,是文件管理的单元
管理范围
- 版本控制系统,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等
- 而图片、视频这些二进制文件等管理,但不能跟踪具体变化
工作区和暂存区
- 工作区是电脑里面的目录,直接操作的就是工作区
- 暂存区stage是在工作区和版本库之间的缓冲区域
- git add会将工作区的更改推送到暂存区,此时更改并未成为版本
- git commit会将暂存区打包组成一个新的版本
- 暂存区的内容是临时的,切换版本的时候暂存区会丢失
忽略特殊文件
- .gitignore文件文件配置忽略特殊文件
- https://github.com/github/gitignore 列出了常见的可忽略文件
命令
初始化仓库
- git init 将当前文件夹初始化为仓库
- 初始化后出现.git目录,用于记录跟踪仓库状态
信息配置
- git config --global user.name ‘name’
- git config --global user.email name@xxx.com
- git config --global color.ui true 显示颜色
- git config --global alias.st status 配置别名,示例用st代替status
查询
- git status 查看状态
- git log 查看日志 --oneline 用一行显示一个版本 --graph 用线显示出分支
- git diff 查看工作区文件内容相对版本库修改 --cached 查看暂存区文件内容相对版本库修改
基本操作
- git checkout -- file 丢弃工作区file文件的修改
- git add {file} 添加文件从工作区到暂存区
- git rm {file} 删除文件从工作区到暂存区
- git reset [HEAD] {file} 从暂存区拉回到工作区
- git commit -m “message” 提交暂存区到仓库
- git commit [file1] [file2] -m “message” 提交指定文件更改到仓库
- git commit -am “message” 添加所有修改并提交
时光穿越
- git checkout {commit号} 切换HEAD指针位置,可以切到之前的commit位置,用于临时切回去查看
- git reset --hard {commit号} 直接切换分支指针位置,用于版本回退
- git reset --hard HEAD^^ 一个^代表HEAD指针往前退一个位置
- git tag {标签号} 给commit(版本)打上标签,可以替代版本号
分支
- git branch 查看分支
- git branch {分支名} 创建分支
- git branch -d {分支名} 删除分支
- git switch/checkout {分支名} 切换分支
- git merge {分支名} 将别的分支合并过来,直接合并两个分支
- git merge --no-ff -m “message” {分支名} 把别的分支的更改加过来,别的分支还在
保存现场
- git stash 把工作现场收拾保存起来,避免切换分支的时候丢失
- git stash list 列出保存的工作现场
- git stash apply [名字] 应用某个工作现场
- git stash drop [名字] 删除某个工作现场
- git stash pop 回到最近保存的工作现场并删除
远程
- git clone [repository] 将远程仓库克隆下来
- git remote add origin [repository] 将已有本地仓库与远程仓库关联起来,origin是习惯的远程名字
- git remote 各种远程查看
- git pull 从远程仓库中拉取变化
- git rebase 变基,调整更改的基础,以将多个分支合并成一条
- git push {远程库名} {本地分支名} 推送本地分支到远程仓库中
- git push origin {本地branch}
- git push origin {本地branch:远程branch}
进阶
- git官网