跳转至

006

1. Git 基本概念

1.1 何为版本控制

版本控制系统是能够随着时间的推进记录一系列文件的变化, 以便于管理和控制文件的系统。

其分为三个大类:

本地版本控制系统 Local Version Control Systems

将文件的各个版本以一定的数据各式存储在本地磁盘中, 这种方式在一定程度上解决了需要手动复制和粘贴的问题, 但是无法解决多人协作的问题。

集中式版本控制系统 Centralized Version Control Systems

相比本地版本控制没有什么本质变化, 只是将负责数据存储的位置变为了中央服务器, 其优点是解决了本地版本控制系统无法多人协作的问题, 但是如果中央服务器 一旦宕机或者磁盘损坏, 那么会造成不可估量的损失。

分布式版本控制系统 Distributed Version Control System

与前两者不同, 分布式版本控制系统中, 系统保存的不是文件变化的差量, 而是文件快照, 即将文件的整体复制和保存, 因此用户每次拷贝的内容都是一个完整的版本, 包括历史记录、提交记录等, 避免了服务器宕机照成的数据数据丢失。

1.2 Git 文件结构

  • 工作区:在电脑中可以看到的目录。
  • 暂存区:stage或index,一般存放在.git目录下的index文件中。
  • 版本库:在工作区中有一个隐藏目录.git,是Git的版本库。

2. 配置Git个人用户信息

通过以下指令,可以配置用户的名称和电子邮件地址

全局用户信息配置
git config --global user.name "<name>"
git config --global user.email "<email>"

如果使用了--global选项,则更改的配置文件为用户主目录下的,其它所有的项目均默认使用这个配置里的用户信息。若想单独为项目配置用户信息,则去除--global选项即。

当前项目用户信息配置
git config user.name "<now name>"
git config user.email "<now email>"

若想检查已有的用户配置信息,则可以使用如下指令

git config --list
输出结果
$ git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=E:/Software/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
user.name=JRNitre
user.email=somebearcat@outlook.com
core.editor=vim

3. Git 创建仓库

3.1 初始化仓库

git init

该命令执行后, 会在执行命令所在的文件夹内生成一个 .git 目录。若想使用指定的目录作为 Git 仓库, 则增加目标目录即可。

git init <new repo>

为目标文件夹目录

3.2 提交文件

使用 git add 命令向 Git 中提交文件。

git add <file name>

git add 将命令所指定的文件添加到 Git 的暂存区中。

git commit -m '<commit>'

git commit 命令提交修改,通过 -m 修饰可以附加修改记录。

3.3 拷贝项目

通过 git clone 命令即可从现有的 Git 仓库中拷贝项目。

git clone <repo>
git clone <repo> <directory>

<repo> 为指定需要 clone 的目录

<directory> 可以将需要克隆的仓库指定 clone 到对应的目录。

3.4 配置仓库

使用 git config 命令进入 vim 编辑器对仓库进行配置。

git config -e               # 针对当前仓库
git config -e --global      # 针对系统上所有的仓库

4. Git 基本命令

4.1 创建仓库

命令 说明
git init 初始化仓库
git clone 拷贝一份远程仓库,下载一份项目

4.2 提交与修改

命令 说明
git add 添加文件到暂存区
git status 查看仓库当前状态
git diff 比较文件的不同:暂存区和工作区的差异
git commit 提交暂存区到本地仓库
git reset 回退版本
git rm 将文件从暂存区和工作区中删除
git mv 移动或者重命名工作区中的文件
git checkout 分支切换
git switch 更清晰的切换分支
git restore 恢复或者撤销文件的修改

4.3 提交日志

命令 说明
git log 查看历史提交记录
git blame <file> 以列表形式查看指定文件的历史修改记录

4.4 远程修改

命令 说明
git remote 远程仓库操作
git fetch 从远程获取代码库
git pull 下载远程代码合并
git push 上传远程代码合并

5. Git 分支管理

5.1 创建分支

使用 git branch 命令创建一个分支。

git branch <branch_name>

<branch_name> 分支名

5.2 切换分支

使用 git checkout 命令切换到指定分支。

git checkout <branch_name>

<branch_name> 需要切换的分支名

5.3 合并分支

使用 git merge 命令可以合并,统一分支。

git merge <branch_name>

<branch_name> 分支合并到当前所在分支。

6. 提交历史

通过 git log 命令可以查询提交的历史记录。

git log [select] [branch_name/Hex]

[branch_name/Hex] 需要查询的分支名。

[select] 修饰选项可以调整 log 命令的输出方式。

[select] 常用选项列表。

[select] 说明
-p 显示提交补丁(具体更改内容)
--oneline 以简洁的一行格式提交显示信息
--graph 以图形化的方式显示分支和合并历史
--decorate 显示分支和标签指向的提交
--author=<作者> 只显示特定作者的提交
--since=<时间> 只显示指定时间之后的提交
--untl=<时间> 只显示指定时间之前的提交
--grep=<模式> 只显示包含指定模式的提交信息
--no-merges 不显示合并提交
--stat 显示简略统计信息,包括修改的文件和行数
--abbrev-commit 使用短提交哈希值
--pretty=<格式> 使用自定义的提交信息显示格式

7. Git 远程分支操作

7.1 从远程分支获取

git clone 命令可以从远程分支获取仓库。

git clone <url>

<url> 远程仓库的 url, 例如 https://github.com/user/template.git 即可将该云端存储库克隆到本地。

git clone -b <Target_branch> <url>

通过增加 -b 命令修饰,即可实现从远程仓库克隆指定分支 <Target_branch>

7.2 从远程分支拉取

git pull 命令拉取远程分支到本地。

git pull <remote_host> <remote_branch>:<local_branch>

<remote_host> 远程主机名。

<remote_branch> 远程分支名。

<local_branch> 本地分支名。

7.3 推送本地分支到远程

git push 推送本地分支到远程。

git push <remote_host> <local_branch>:<remote_branch>

<remote_host> 远程主机名。

<local_branch> 本地分支名。

<remote_branch> 远程分支名。