Git使用 | 青训营笔记

142 阅读5分钟

这是我参与「第五届青训营 」笔记创作活动的第 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指令查看
  • 查看已经删除的记录:
    • git reflog 这个指令可以看到已经删除的提交记录

Git GC

image.png

6)修改历史版本

image.png

7)忽略文件

在仓库中创建一个.gitignore文件,然后写入要忽略的文件和模式即可

image.png

8)分支

  • 查看本地分支 git branch
  • 切换分支:git checkout 分支名
  • 创建本地分支
    • git checkout -b 分支名
    • git branch 分支名
  • 跟踪远端分支:
    • git branch 本地分支名(一般与远程分支保持一致) origin/远程分支名 注意:创建分支后会将当前分支的文件全部复制到新分支里面去
  • 删除分支
    • git branch -d 分支名 删除分支时,需要做各种检查
    • git branch -D 分支名 不做任何检查强制删除
  • 合并分支:git merge 要合并到当前分支的分支名

9)配置SSH公钥

目前的Key的类型有四种,分别是dsarsaecdsa 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可以强制推送
    • 查询关联关系可以使用指令git branch -vv