Git 版本控制工具 | 学习笔记
Git 版本控制工具
各类版本控制工具
-
集中式(svn):
-
svn 因为每次存的都是差异 需要的磁盘空间会相对小一点 可是回滚速度会很慢
-
优点:
- 代码存放在单一的服务器上便于项目的管理
-
缺点:
- 服务器宕机:员工写的代码无法实时更新到服务器得不到保障
- 服务器炸了:整个项目的历史记录都会丢失
-
-
分布式(git):
- git 每次存的都是项目的完整快照 需要的是硬盘空间会相对大一点
- (Git 团队对代码做了极致的压缩 最终需要的实际空间比 svn 大不了多少 可是 Git 的回滚速度极快)
基本控制命令
git --version查看当前git版本 |
-
区域:
- 工作区:本地代码目录
- 暂存区:暂时存放上传的代码,负责记录修改但未提交的版本。
- 版本库:确认提交的代码版本
-
对象:
- Git 对象(存内容不存文件名):
- key :value 组成的键值对(key 是 value 对应的 hash)
- 键值对在 git 内部是一个 blob 类型
- 树对象
- 提交对象
-
Git_linux 基本命令:
- cd 文件夹名 :进入某文件夹
- clear:清除屏幕
- echo ‘信息’往控制台输出信息(打印)
- echo ‘信息’> test.txt 新建 txt 文件内写入输出信息
- ll:查看当前目录下的子文件&子目录平铺在控制台
- find 目录名 :将对应文件下的子孙文件&子孙目录平铺在控制台
- find 目录名-type f:将对应目录下的文件平铺在控制台
- rm 文件名:删除文件
- mv 源文件 重命名文件:重命名
- cat 文件的 url :查看对应文件的内容
- vim 文件的 url(在英文模式下)
- 按 i 键插入模式 进行文件的编辑
- 按 esc 键&按:键 进行命令的执行
- q! 强制退出(不保存)
- wq 保存退出
- set nu 设置行号
-
git init 初始化 git 仓库生成 .git 文件夹(版本库)
.git 文件夹内有
- hooks:目录包含客户端或服务端的钩子脚本
- info:包含一个全局性排除文件(git 不需要管理的文件)
- logs:保存日志信息
- objects:目录存储所有数据内容(数据库)
- refs:目录存储指向数据(分支)的提交对象指针
- config:文件包含项目的配置选项
- description:用来显示对仓库的描述信息
- HEAD:文件指示目前被检出的分支
- index:文件保存暂存区信息
Git 连接 Github
-
首先在本地运行
-
ssh-keygen -t rsa –C “youremail@example.com”
生成 ssh key -
在用户目录.ssh 中 Id_rsa 为私钥不可对外发
-
Id_rsa.pub 公钥可对外发
-
-
在 github 的 setting 中打开 ssh keys 页面
- Add ssh key
- tittle 任填(主机名、用户标识)
- key 内复制公钥内容 即添加成功
git remote add origin url(github的) |
-
本地运行该命令即可把本地仓库分支 master 内容推送到元仓库去
-
由于远程库是空的,我们第一次推送 master 分支时,加上了 –u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。
Git 操作
git --version查看当前git版本 |
-
文本编辑器
设置 Git 默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::
$ git config --global core.editor emacs
-
差异分析工具
还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
$ git config --global merge.tool vimdiff
初始化基本操作
cd 进入某目录、文件 |
Git 命令
git clone url diretcory
-
克隆仓库 url 为仓库链接 directory 为本地目录地址(默认当前目录可不填)
-
url 分为 ssh 协议、git 协议、https 协议 其中常用 ssh 协议 速度较快
git checkout –b dev origin/dev
- 可以克隆分支并本地创建
git status
-
查看文件状态 是否有文件未提交、修改、添加、删除等
-
modified:文件名 为有修改的文件
-
单独文件名 为新增文件
git diff
xxx 查看某文件修改内容
git log
- 查看历史提交记录 内容有版本号(hash)、作者、事件、增加的内容
git log -pretty=online
-
日志太多 只显示版本号和增加内容
-
–grahy 查看历史什么时候出现分支、合并
-
–reverse 逆向显示所有工作日志
git log --author
-
只查看当前作者日志
-
-no-merges 选项以隐藏合并提交
-
指定日期 可以执行几个选项:-因为和–before,但是你也可以用–until 和–after。
-
git log --oneline --before = {3.weeks.ago} --after = {2010-04-18} --no-merges
git reflog
- 查看历史提交记录(包括已回退)
git reset --hard HEAD^
- 回退到上一个版本 的个数代表回退版本个数三个即^^
git reset --hard HEAD~100
- 回退多个版本(此为 100)
git reset --hard 版本号
- 回退到某个版本
git checkout – file
-
丢弃工作区的修改
-
当 git status 显示有文件修改时可使用
-
rm file 删除文件 (删除后可以选择 commit 和恢复)
-
git commit 提交
-
git checkout – file 在 commit 前恢复刚删除的文件
git checkout -b 分支名
-
创建并切换分支
-
git checkout 命令加上 –b 参数表示创建并切换,相当于如下 2 条命令
分支操作汇总:
- 查看分支:git branch(当前分支前有*号)
- 创建分支:git branch name
- 切换分支:git checkout name
- 创建+切换分支:git checkout –b name
- 合并某分支到当前分支:git merge name
- 删除分支:git branch –d name
当合并分支冲突时查看文件会显示冲突
-
Git 用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD 是指主分支修改的内容, >>>>>fenzhi1 是指 fenzhi1 上修改的内容,我们可以修改下如下后保存:
-
通常合并分支时,git 一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff 来禁用”Fast forward”模式。
-
合并 dev 分支,使用命令 git merge –no-ff -m “注释” dev
-
当工作未完成但要提交时先隐藏’工作现场‘再创建临时分支完成
git stash
- 想要恢复
git stash list
-
可用 git stash apply/pop 方法恢复
-
apply 方法恢复 stash 内容并不删除,需要 git stash drop 删除
-
pop 方法恢复的同时删除了 stash
推送:
git push origin master
- 推送主分支
git push origin dev
- 推送 dev 分支
git checkout –b dev origin/dev
-
克隆分支并本地创建
-
多人修改同一个文件会出现报错
-
通过 git pull 把最新提交的 origin/dev 抓下来解决冲突再推送
-
git pull 报错可能是没有指定本地 dev 分支与远程 origin/dev 分支链接
-
通过命令建立链接
-
git branch --set-upstream dev origin/dev
-
然后再 git pull
-
解决完冲突再提交、推送
标签:
git checkout 分支名
- 切换到想要操作的分支
- git tag 标签名 即可打上标签
- 想要给历史提交的打标签找到版本号(hash)
git tag 标签名 版本号
- 即可打上标签
git show 标签名
- 查看当前标签的提交信息
git tag -a 标签名 -m“注释“ 版本号
- 可添加注释信息
git tag -d 标签名
- 删除标签
git push origin 标签名
- 推送标签到远程
git push origin --tags
- 一次性推送全部未推送到远程的标签
git tag -d 标签名
-
删除已推送的标签
-
删除本地标签后再执行
git push origin :refs/tags/标签名
掘金:前端 LeBron
知乎:前端 LeBron
持续分享技术博文,关注微信公众号 👇🏻