📚
handbook
  • Introduction
  • 1.前言
    • 前言
    • 鸣谢
  • 2.环境篇
    • 工具部署和使用
      • 团队协作工具
        • Confluence
      • 开发工具
        • Docker
          • 镜像导入导出
          • 安装
        • Docker Compose
      • 持续集成工具
        • Gerrit
        • Sonarqube
          • 分析参数设定
          • Prerequisite
          • 服务端设置
        • Ubuntu Ci Deploy
          • ubuntu使用docker部署jenkins+sonarqube
        • 持续集成部署
      • 文本编辑工具
        • Gitbook相关注意事项
        • Markdown快速入门
      • 版本控制
        • Git
          • 1.基础
            • Git基础(一)
            • Git基础(二)
            • Git基础(三)
            • Git基础(四)
            • Git基础(五)
          • 2.命令详解
            • 命令速查
          • 3.进阶技巧
            • git技巧
      • 自动化测试工具
        • Appium
          • capability参数配置
          • 安装
          • 简介
      • 项目管理工具
        • Jira
    • 开发环境配置
      • 通用
        • Homebrew安装与使用
        • Git服务器添加SSH Key
        • koroFileHeader使用
        • nodejs与npm的安装
        • npm更换国内源
        • pip使用相关
        • PostgreSQL安装与使用
        • proxychain安装与使用
        • shell配置环境变量
        • snapd安装与使用
        • terminal走代理
    • 快捷键速查
      • shell常用快捷键
  • 3.语言篇
    • C
      • 代码规范
      • 语言技巧
    • Cpp
      • 代码规范
      • 基础知识
        • 理解C++中的左值和右值
      • 语言技巧
        • 并发编程
          • 简单的线程池实现
    • Golang
      • 代码规范
        • 避免使用转义字符串
        • 避免参数语义不明确
        • 嵌套式结构体
        • 函数的分组与顺序
        • 函数命名
        • 声明一致性
        • 导入别名
        • 使用字段名初始化结构体
        • 本地变量声明
        • map初始化
        • nil用法
        • 包命名
        • 命名Printf样式的函数
        • 减少嵌套
        • 缩小变量作用域
        • struct引用初始化
        • 测试表声明
        • 顶层变量声明
        • 不必要的else
      • 环境配置
        • 代码检查格式化工具
          • Go Fmt
          • Goimports
          • Golint
          • Go Vet
        • go mod详解
        • golang安装
        • Golang开发环境
        • Troubleshooting
      • 语言技巧
        • 如何分包
    • Java
      • 代码规范
      • 语言技巧
        • 注解编程
        • 动态代理
    • Js
      • 语言技巧
        • Rollup
    • Kotlin
      • 基础知识
        • 写给开发者Kotlin指引(一)
        • 写给开发者Kotlin指引(二)
    • Python
      • 语言技巧
        • Best Practice Of Python S Project Structure
  • 4.规范篇
    • Git message规范
  • 5.技术篇
    • Android技术
      • Hook
        • EdXposed例子
        • Android 10 上安装Magisk和EdXposed
      • Tinker
        • 1.Tinker及其使用
      • 准备
        • ADB连接设备步骤及注意事项
        • adb连接设备
        • aosp编译
      • 基础
        • Binder接口调用的鉴权方法
        • Make 及 Android 编译系统介绍
        • 使用Content Provider为其他应用提供数据
      • 源码阅读
        • Framework源码分析 Looper Handler
        • Framework源码分析 启动流程 ServiceManager的初始化
        • Framework源码分析 启动流程 Zygote启动SystemServer
    • JS Bridge
      • JSBridge初探
    • Kernel技术
      • kallsyms子系统
    • Test技术
      • 软件测试
        • jnekin+sonar 部署 问题总结
        • 性能测试基础
        • 软件测试的背景
        • 测试基础
        • 测试人员的核心竞争力
    • 操作系统原理
      • 处理器如何实现原子操作
Powered by GitBook
On this page
  • 一、基础概念
  • 1.1 什么是git
  • 1.2 git如何保证检查到所有改动
  • 1.3 git的三种工作区域
  • 二、git基本使用方法
  • 2.1 git初始配置
  • 2.2 初始化仓库
  • 2.3 将修改提交到本地仓库中

Was this helpful?

  1. 2.环境篇
  2. 工具部署和使用
  3. 版本控制
  4. Git
  5. 1.基础

Git基础(一)

Previous1.基础NextGit基础(二)

Last updated 4 years ago

Was this helpful?

一、基础概念

1.1 什么是git

git是版本管理系统(Version control systems ,VCS),用于对项目的版本进行跟踪管理。在git出现之前,拥有很多VCS,这些VCS的工作原理是对于项目中的每一个文件,保存他们随时间积累的改动。

git不同于其他版本管理工具,它每次改动都会保存所有项目文件的快照,如果某些文件在这次改动中没有变化,那么git只保存一个指向前一版本的链接。

1.2 git如何保证检查到所有改动

git会根据项目目录结构以及文件内容,通过SHA-1算法计算生成校验和,所以只要你对项目做了改动,git就能察觉。

1.3 git的三种工作区域

git的工作区域分为工作区、暂存区和已提交区,当我们在项目中新增、修改文件时,这些改动都在工作区中。如果我们修改完成,使用git add命令,就可以讲这些改动由工作区移到暂存区。当文件处于暂存区时,我们就可以使用git commit命令将文件由暂存区挪到已提交区。当文件处于已提交区域时,所有的改动都会被永久保存在本地数据库中。如果你将项目根目录的.git文件夹删除,就会永久失去所有的版本记录。

二、git基本使用方法

2.1 git初始配置

当我们初次使用git,用到的最简单且必要的配置就是为git配置一个全局可用的提交者(还是作者?提交者和作者的区别?)的名字和其邮箱,其中--global参数表示本次配置对于本机所有的git仓库都有用,除非你在项目的局部配置文件里面进行了同样的配置,局部的配置会覆盖全局的配置。

git config --global user.name "zhanghaokang"
git config --global user.email "zhanghaokang@antiy.cn"

此外,还需要配置git命令使用的编辑器,下面的命令就是将git默认的编辑器改为vim。

git config --global core.editor vim

当使用git commit命令时,如果不使用-m参数加上提交信息,就会打开配置的editor让你进行下一步的操作。 还有一个可选的配置:

git config --global core.quotepath false

该配置会使git status的结果中的中文正常显示。

使用git config --list就可以展示出当前的所有配置。

2.2 初始化仓库

在项目根目录使用git init就可以将项目生成为git项目,该操作会在项目根目录生成一个.git目录,他就用于记录版本的变化,并且我们可以在其中进行项目特有的配置,例如修改该仓库特有的提交者姓名和邮箱。

2.3 将修改提交到本地仓库中

当项目被初始化为git仓库后,只要你在当前目录中新增文件时,git就会将该文件列为未被跟踪状态。使用git status可以看到当前仓库所有文件的状态。

On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    2.环境篇/工具部署和使用/开发工具/git/1.基础/
    2.环境篇/工具部署和使用/开发工具/git/git_reset_commit.md
    images/tools_deploy/dev/

可以看到,当前有一些文件和文件夹处于Untracked files中,这些文件处于未跟踪状态,对其进行修改git也不能知道改动的内容。此时,就需要使用git add命令,将文件添加到暂存区中。

git add 2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

在上面的命令结束后,再次运行git status来查看当前工作区的状态。

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    2.环境篇/工具部署和使用/开发工具/git/git_reset_commit.md
    images/tools_deploy/dev/

可以看到,刚刚添加到暂存区的文件显示在Changes to be committed中,git还提示我们,如果我们想将该文件从暂存区移除,可以使用git restore --staged <file_name>命令。

当我们再次对该文件进行修改后,再次使用git status查看状态。

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    2.环境篇/工具部署和使用/开发工具/git/git_reset_commit.md
    images/tools_deploy/dev/

可以看到,现在又多出了一列Changes not staged for commit,这一列的文件中表示该文件已经被git所跟踪但是还有修改没用添加到暂存区。再次使用git add将修改添加到暂存区。

当所有的修改都添加到暂存区后,就可以使用git commit命令将这些修改挪到已提交区。

git commit -m "Develop | add git_fundamental.md"

其中-m表示添加提交信息,如果不加该参数,git会打开你配置的默认编辑器,然后你在那里修改提交信息。

当该操作完成后,所有变动就会被添加到本地git仓库,你可以使用git log来查看所有提交记录。

commit 552ec14f9ccdce80ae8c686820add3df7c800f9e (HEAD -> master, origin/master, origin/HEAD)
Author: zhaosq <zhaosq0815@163.com>
Date:   Mon Nov 23 10:28:21 2020 +0800

    Maintain | update test_tech on Nov 2020

    Signed-off-by: zhaosq <zhaosq0815@163.com>

commit f99fec9901064a78c7290e6bbd95de9660b17225
Author: hangxu <hangxu@antiy.cn>
Date:   Mon Nov 23 10:04:18 2020 +0800

    Bug | fix style error

该命令会显示项目的所有提交历史,commit后面跟的是commit id,用于标记当前版本(SHA-1生成的校验和)。如果你后悔了,可以使用git reset命令将本地的内容返回到对应commit id的版本。

git reset --hard f99fec9901064a78c7290e6bbd95de9660b17225

在--hard表示将所有内容返回到f99fec9901064a78c7290e6bbd95de9660b17225版本,如果使用--soft,那么f99fec9901064a78c7290e6bbd95de9660b17225版本到当前版本的所有改动将会保留在暂存区。

上述就是git的基本工作流程,下图也很好的概括了这些常用操作。

normal vcs
git vcs
git area
git work flow