Git版本控制工具

各类版本控制工具

  • 集中式(svn):

    • svn因为每次存的都是差异 需要的磁盘空间会相对小一点 可是回滚速度会很慢

    • 优点:

      • 代码存放在单一的服务器上便于项目的管理
    • 缺点:

      • 服务器宕机:员工写的代码无法实时更新到服务器得不到保障
      • 服务器炸了:整个项目的历史记录都会丢失
  • 分布式(git):

    • git每次存的都是项目的完整快照 需要的是硬盘空间会相对大一点
    • (Git团队对代码做了极致的压缩 最终需要的实际空间比svn大不了多少 可是Git的回滚速度极快)

基本控制命令

 git --version查看当前git版本 

git config --gobal user.name "自定义名称"

git config --gobal user.email "自定义邮箱"

git config --list 检查基础配置信息

# gobal代表本用户可替换为system(本操作系统)或者不填(本项目)

# 优先级 本项目>本用户>本操作系统
  • 区域:

    • 工作区:本地代码目录
    • 暂存区:暂时存放上传的代码,负责记录修改但未提交的版本。
    • 版本库:确认提交的代码版本
  • 对象:

    • 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的)

git push -u origin master
  • 本地运行该命令即可把本地仓库分支master内容推送到元仓库去

  • 由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

Git操作

 git --version查看当前git版本 

git config --gobal user.name "自定义名称"

git config --gobal user.email "自定义邮箱"

git config --list 检查基础配置信息

# gobal代表本用户可替换为system(本操作系统)或者不填(本项目)

# 优先级 本项目>本用户>本操作系统
  • 文本编辑器

    设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

    $ git config --global core.editor emacs

  • 差异分析工具

    还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

    $ git config --global merge.tool vimdiff

初始化基本操作

# cd 进入某目录、文件
# mkdir xxx 新建xxx文件夹(文件带后缀)
# pwd显示当前目录
# cat file 查看文件

git init #初始化一个git仓库

git init newrepo #使用指定目录作为git仓库

git remote add origin url(github的url)

git add … #添加文件到缓存
#… 可为文件和目录 为提交作准备

git add ./

git commit -m ‘注释’

git push -u origin master

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

持续分享技术博文,关注微信公众号👇🏻

img