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
持续分享技术博文,关注微信公众号👇🏻