Git―基本操作

Git

⛅认识 Git

想象如下场景, 一位画师收到了一份邀约画作的任务

这位画师便开始着手作画, 不久后产出作品(version1)

客户收到之后看了看对画师说, 画的很不错, 就是能不能再加些五颜六色的黑?

画师想, 您是甲方, 您说了算. 于是在原来的基础上产出作品(version2)

客户收到之后看了看对画师说, 画的很不错, 就是还缺那么一丝丝忧伤的感觉

画师想, 您是甲方, 您说了算. 于是在原来的基础上产出作品(version3)

客户收到之后看了看对画师说, 画的很不错, 但我还是喜欢你第一版的作品

画师想, 得亏我会用 Git, 于是画师顺利的拿到了第一版的作品并交付给客户

根据上面的描述, 我们大致对 Git 有所了解🍂

  1. Git 是一个版本控制器, 能够记录每次的修改及版本的迭代
    譬如当客户问画师, 你第二版作品做出了什么修改的时候, 画师就可以利用 Git 查看做出了哪些修改
  2. Git 可以控制电脑中的所有格式文档

⛅安装 Git

Centos(7.6)

# 安装 Git 命令
sudo yum install git -y
# 查看 Git 版本
git --version

Ubuntu

# 安装 Git 命令
sudo apt-get install git -y
# 查看 Git 版本
git --version

⛅Git―基本操作

创建本地仓库🍂

# 创建 Git 目录
mkdir gitcode
# 进入创建的 Git 目录
cd gitcode/
# 创建本地仓库
git init
# 查看仓库树形结构
tree .git/

有些小伙伴查看仓库树形结构会弹出 -bash: tree: command not found, 表明所在的系统中没有安装 tree 命令

安装 tree 命令sudo yum install tree

配置本地仓库🍂

配置 name 和 email 避免后续向本地仓库提交内容时出错

# 配置当前仓库下的 name
git config user.name "在这里输入 name"
# 配置当前仓库下的 email
git config user.email "在这里输入 email"
# 查看配置是否成功
git config -l
# 删除配置的 name
git config --unset user.name
# 删除配置的 email
git config --unset user.email
# 配置所有仓库下的 name
git config --global user.name "在这里输入 name"
# 配置所有仓库下的 email
git config --global user.email "在这里输入 email"
# 删除所有仓库下的 name
git config --global --unset user.name
# 删除所有仓库下的 email
git config --global --unset user.email

注意

通过 git config --global 配置的属性无法通过 git config --unset 进行删除

但可以通过 git config --global --unset 进行删除

工作区, 暂存区, 版本库🍂

版本库

图中的.git目录就是版本库

不允许对.git目录进行任何的修改

工作区


.git是版本库, 与.git处于同一目录下的被称为工作区

图中的ReadMe就处于工作区

  • stage, 又称为暂存区或者索引(index). 暂存区存放的不是一个个 git 对象, 而是 git 对象的索引
  • add, 将工作区中所有修改的内容添加至版本库的暂存区中
    • 修改包括: (1) 添加 (2) 修改 (3) 删除
  • commit, 将暂存区中的内容提交至 master 分支下. master 分支存放的也是 git 对象的索引

除去上述内容外, 还存在对象库(Objects), 从而到达对版本的控制

修改的工作区内容会写入到对象库的一个新的 git 对象中
(对比暂存区 → 存放的是 git 对象的索引)

添加文件🍂

# 添加指定文件至暂存区
git add 指定的文件
# 添加当前目录下所有文件至暂存区
git add .
# 提交暂存区的全部文件到本地仓库
git commit -m "提交文件的描述信息"
# 提交暂存区的指定文件到本地仓库
git commit file1 file2 -m "提交文件的描述信息"
# 查看提交记录
git log
# 查看提交记录(简洁版)
git log --pretty=online

查看文件🍂

# 查看 .git 文件内容
git cat-file -p commitId

commitId 可以在 Objects 中查看


paraent, 表示上一次的commitId

修改文件🍂

# 查看从上一次提交到现在是否对文件进行过修改
git status
# 查看指定文件的暂存区与工作区的差异
git diff "filename"
# 查看指定文件的版本库与工作区的差异
git diff HEAD -- "filename"

版本回退🍂

# 版本回退
git reset [--soft | --mixed | --hard] [HEAD]
# 查看 git 历史操作 → 用于查找对应的 commitId
git reflog

回退的本质 → 将版本库的内容进行回退

  • --mixed, 默认选项, 使用时可以不带该参数. 将暂存区的内容回退到指定版本

  • --soft, 将版本库的内容回退到指定版本

  • --hard, 将暂存区 , 工作区的内容回退到指定版本

  • HEAD

    • 可写成commitId, 表示指定回退的版本
    • HEAD, 表示当前版本
    • HEAD^, 表示上一个版本
    • HEAD^^, 表示上上一个版本
    • 以此类推...

    • 也可以使用~数字表示
      • HEAD~0, 表示当前版本
      • HEAD~1, 表示上一个版本
      • HEAD~2, 表示上上一个版本
      • 以此类推...

☃️案例

  • ReadMe 文件
    • version1.0 提交的内容 → git1
    • version2.0 追加提交的内容 → git2
    • 此时 ReadMe 文件的内容为 git1, git2

现在将 ReadMe 文件的内容进行回退

工作区 暂存区 版本库 参数
git1 git2 git1 git2 git1 git2
git1 git2 git1 git2 git1 --soft
git1 git2 git1 git1 --mixed
git1 git1 git1 --hard

撤销修改🍂

  • 对于撤销修改, 通常存在3种情况
    • 工作区的代码还没有 add → 情况1
    • 暂存区的代码还没有 commit → 请款2
    • 已经 add & commit → 情况3

对于情况3, 想要撤销修改的前提是没有执行 push 操作到远程仓库

☃️案例

  • ReadMe 文件
    • version1.0 提交的内容 → git1
    • version2.0 追加提交的内容 → git2
    • 此时 ReadMe 文件的内容为 git1, git2
工作区 暂存区 版本库 情况 解决方式
git1 git2 git1 git1 情况1 git checkout -- "filename"
git1 git2 git1 git2 git1 情况2 1. git reset HEAD 2. git checkout -- ReadMe
git1 git2 git1 git2 git1 git2 情况3 git reset --hard HEAD^

删除文件🍂

# 删除工作区的文件 & add 对应的文件
git rm "filename"
# commit
git commit "filename" -m "提交文件的描述信息"
相关推荐
high20111 小时前
【Git】-- 版本说明
git
kaixin_learn_qt_ing2 小时前
git clone
git
sin22012 小时前
git stash
git
喝鸡汤2 小时前
一起学Git【第二节:创建版本库】
git
慢慢成长的码农2 小时前
git 同步分支操作
git
sin22012 小时前
git推送本地仓库到远程(Gitee)
git·gitee
丁总学Java4 小时前
git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表
git
yylの博客7 小时前
Windows通过git-bash安装zsh
windows·git·bash·zsh
丁总学Java7 小时前
(Z Shell)zsh: no matches found: ? 使用单引号包裹
git·zsh
萌狼蓝天8 小时前
【NAS】绿联NAS+极狐Gitlab+1Panel
git