本文摘要

Git作为版本控制工具,使用非常广泛,在此咱们由浅入深,分三篇文章(Git基础、Git进阶、Gitlab搭那家)来深入学习Git


文章目录

  • 本文摘要
  • 1.Git仓库基本概念
    • 1.1 远程仓库(Remote)
    • 1.2 本地库(Repository)
  • 2. Git仓库工作流程
  • 3. Git常用命令
  • 4. Git配置文件
    • 4.1. 查看配置文件
    • 4.2. 新增配置文件
    • 4.3. 删除配置文件
  • 5. .gitignore文件
    • 5.1. 文件加载进暂存区
    • 5.2. glob模式
    • 5.3. 匹配示例
    • 5.4. 定义全局忽略文件
    • 5.5. 通用忽略文件
  • 6.diff
    • 6.1. 命令
    • 6.2. 工作空间与暂存区
    • 6.3.暂存区与版本库
    • 6.4. 工作空间与版本库
    • 6.5. 版本库与版本库

1.Git仓库基本概念

1.1 远程仓库(Remote)

即资源库,是远程服务器机器上的代码库,用于做不同版本库文件保存、更新。如Gitlab、GitHub、Gitee

1.2 本地库(Repository)

即用户在本地创建的目录,拥有远程库的一个快照,由工作区+版本库构成

  • 工作区
    项目根目录中除.git目录以外的内容,存储内容的实际文件
  • 暂存区
    也叫做缓存区,暂存信息存放在.git目录下的index文件中,即.git/index中,用于临时保存修改的内容
  • 版本库(.git目录)
    本地库的根目录中的一个隐藏目录.git,用于记录版本信息,git进行版本控制所需要的文件,都放在.git文件夹中

2. Git仓库工作流程

  • 克隆远程库:从远程库上克隆完整的Git仓库(包括代码和版本信息)到本地;
  • 在本地库上修改代码:在本地库上根据不同的开发目的,创建分支,修改代码;
  • 提交到分支:在本地分支上提交代码;
  • 把修改合并到本地主分支:在本地库上提交更新,也就是说,把修改合并到本地主分支;
  • 把远程库合并到本地主分支:把远程库上的最新代码fetch下来,跟本地主分支合并,如果存在冲突,那么解决冲突。
  • 把本地主分支提交到远程库:生成补丁(patch),把补丁发送给远程库。

3. Git常用命令

命令作用示例
init初始化git项目git init
status查看git中文件状态git status
add将工作空间文件添加至git暂存区单文件:git add filename
多文件:git add file1 file2
所有文件:git add .
rm –cached将暂存区文件撤销回工作空间git rm --cached filename
restore将暂存区文件撤销回工作空间git restore --staged filename
commit将暂存区文件上传至git版本库git commit -m '提交注释'
log查看git操作日志显示所有日志:git log
简单显示日志:git log --pretty=oneline
reset –hard HEAD^1. 回退到上一个版本
2. 后边有几个^就表示回退到前边版本
3. 回退指定版本
1. 回退上一版本:git reset –hard HEAD^
2. 回退上上版本:git reset –hard HEAD^^
3. 回退至前10个版本:git reset –hard HEAD~10
reset –hard version回到至指定版本git reset --hard 996c
git reflog回退撤销git reflog
rm删除文件,文件从版本库移至暂存区,要完全删除,必须在执行commitgit rm filename

4. Git配置文件

Git 配置主要分为三类:优先级:仓库级(local)>用户级(global)>系统级(system),对应的文件分别为:仓库级(.git/config)、用户级(~/.gitconfig)、系统级(/etc/gitconfig)

4.1. 查看配置文件

  • 查看仓库级:git config –local -l
  • 查看用户级:git config –global – l
  • 查看系统级:git config –system -l

4.2. 新增配置文件

  • 仓库级:git config –local user.name ‘zhangsan’
  • 用户级:git config –global user.name ‘lisi’
  • 系统级:git config –system user.name ‘wangwu’

4.3. 删除配置文件

  • git config –global –unset user.name

5. .gitignore文件

5.1. 文件加载进暂存区

  • 提交所有变化:git add -A
  • 只提交修改、删除,不包括新建:git add -u
  • 只提交新建、修改,不包括删除:git add .

5.2. glob模式

  • “*”:匹配零个或多个任意字符
  • []:匹配方括号中的字符,如[ab]匹配a或b
  • ” />5.3. 匹配示例
    • logs/:忽略logs目录
    • /logs.txt:忽略logs.txt文件
    • *.class:忽略class结尾的文件
    • !/classes/.class:不忽略classes目录下的class结尾文件
    • tmp/*.txt:只忽略tmp目录下的txt结尾文件
    • **/foo:可以忽略/foo,a/foo,a/b/foo等

    5.4. 定义全局忽略文件

    • git config –global core.excludesfile ~/.gitignore

    5.5. 通用忽略文件

    #java*.class#package file*.war*.ear*.zip*.tar.gz*.rar#maven ignoretarget/build/#eclipse ignore.settings/.project.classpatch#Intellij idea.idea//idea/*.ipr*.iml*.iws# temp file*.log*.cache*.diff*.patch*.tmp# system ignore.DS_StoreThumbs.db

    6.diff

    diff:用于比较工作空间、暂存区、版本库中文件差异性

    6.1. 命令

    • git diff readme.txt

    6.2. 工作空间与暂存区

    $ git diff 1.txt# a/1.txt:表示暂存区文件,b/1.txt:表示工作空间文件diff --git a/1.txt b/1.txt# 表示暂存区的版本index 9a71f81..478d5b1 100644--- a/1.txt+++ b/1.txt# -1:表示暂存区的行数,2:表示工作空间行数@@ -1,2 +1,2 @@ hello world-# update workspace:表示工作空间增加了该行数据+update workspace

    6.3.暂存区与版本库

    $ git diff --cached 1.txtdiff --git a/1.txt b/1.txtindex 9a71f81..478d5b1 100644--- a/1.txt+++ b/1.txt@@ -1,2 +1,2 @@ hello world-+update workspace

    6.4. 工作空间与版本库

    # 指定要比较的版本号$ git diff HEAD 1.txtdiff --git a/1.txt b/1.txtindex 9a71f81..f0bc050 100644--- a/1.txt+++ b/1.txt@@ -1,2 +1,4 @@ hello world+update workspace+xxixixix

    6.5. 版本库与版本库

    # 指定要比较的两个版本号$ git diff HEAD HEAD^diff --git a/1.txt b/1.txtindex 478d5b1..9a71f81 100644--- a/1.txt+++ b/1.txt@@ -1,2 +1,2 @@ hello world-update workspace+