Git使用笔记

Posted Naisu Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git使用笔记相关的知识,希望对你有一定的参考价值。

文章目录


前言

Git是一个免费的、开源的分布式版本控制系统,旨在以快速高效的方式处理从小型到大型的所有项目。

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git用了有些年了,但用到的功能不多,而且大多数时候都是在各种图形界面中进行操作的,总的来说虽然一直在用但对Git算不上了解,打算从头好好梳理下。

Git官网提供了丰富的教程: https://git-scm.com/book/zh/v2 。官网的教程比较全面,内容比较多,平时使用时当作字典查询来说并不方便。这边文章将对相关内容做个摘录或补充,方便自己查询使用。

使用笔记

软件安装

Windows
Windows上直接在下面地址下载安装包安装就行:
https://git-scm.com/downloads
安装时可以选择勾选在资源管理器集成(windows explorer integration)git bashgit gui,这样就可以在文件夹右击打开相应工具。

Debian/Ubuntu
Debian或Ubuntu中使用 sudo apt install git 命令来安装,安装完成后可以先设置下用户名和邮箱地址:

sudo apt install git-all

基础设置

安装完成后可以先设置下用户名和邮箱地址(可能需要以管理员身份运行):

git config --global user.name "naisu"
git config --global user.email naisu@example.com

上面带有 --global 的是全局设置,也可以在每个项目中不带该参数来对这个项目单独设置。

可以使用 git config --list 来查看当前的配置,也可以使用 git config 配置项 来查看单项的配置情况。

本地使用

在本地目录中可以 使用 git init 来初始化仓库 ,初始化完成后就会生成一个 .git 的隐藏目录。

本地使用来说git分为三个区域:

三区划分只是管理上一个抽象的概念,通常项目文件夹中除 .git 目录外的都属于工作区,剩下两区实际存储都是在 .git 目录中的。

本地使用中对三个区的基础操作如下:

使用 commit 提交到本地仓库中就是开发各个过程的归档了,每次提交时会生成一份快照并对此校验生成一串40位的字符串作为本次校验的编号。除了初次提交外每次提交时还会包含它的父提交的指针。

Git中有一个HEAD指针表示只向当前工作所在的某次提交。如果有需要就可以从仓库中 checkout 检出将工作区恢复成某次提交时的版本。检出操作会移动HEAD指针,然后恢复工作区。

Git中一次次的提交串成一条线,这被称为分支,分支有自己的名称和指向最后一次提交的指针,并且通常的时候HEAD指针其实是指向某条分支的。通常使用 git init 初始化仓库时就会有默认的分支master。

可以使用 git branch <branch-name> 来创建分支,然后使用 git checkout <branch-name> 来切换分支;或者也可以使用 git checkout -b <branch-name> 直接创建并切换到新分支。HEAD在哪里,提交时就只会从那里开始增长。

可以使用 git merge <branch-name> 将指定分支合并到当前分支,合并完成后没用的分支可以使用 git branch -d <branch-name> 进行删除。

远程交互

Git是一个分布式版本控制系统,项目仓库可以托管在一个公共的服务器上,方便团队合作开发或是异地开发。

远程交互使用时各个区的基本交互如下:

相比新项目使用 git init 来初始化仓库而言,很多时候基于已有的项目进行开发的情况可能更常见点,所以 使用 git clone <url> 方式克隆远程仓库到本地 是更加常用的方式。

使用 git clone <url> 通常情况下克隆的只有master分支,不包含远程仓库中其它分支。可以使用 git branch -a 来查看远程分支,然后可以使用命名检出该分支。当然更加常用的是使用 git clone -b <branch-name> <url> 直接克隆某个分支。

忽略文件

项目目录下的 .gitignore 文件用于描述不需要版本控制的文件的匹配规则。下面是个基本规则的示例:

# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO,即不进行递归
/TODO

# 忽略任何目录下名为 build 的文件夹
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

对于很多项目该文件也有模板可供参考:
https://github.com/github/gitignore

提交信息格式参考

提交信息最常见的格式是 Angular Git Commit Guidelines 。简单点表示就是下面这样:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
  • type 本次 commit 的类型;
    • feat 添加新特性;
    • fix 修复 bug;
    • docs 仅仅修改了文档;
    • style 仅仅修改了空格、格式缩进、typo 等等,不改变代码逻辑;
    • refactor 代码重构,没有加新功能或者修复 bug;
    • perf 增加代码进行性能测试;
    • test 增加测试用例;
    • chore 改变构建流程、或者增加依赖库、工具等;
  • scope 本次 commit 波及的范围;
  • subject 本次 commit 的主旨(标题);
  • body 本次 commit 的详细描述;
  • footer 本次 commit 相关的链接;

更多内容可以参考下面:
https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits

实际使用中这个格式只是参考,可以根据实际情况选择。一般来说标题不能少,因为在单行模式查看日志的时候会显示第一行信息。

Git常用命令速查表

以上是关于Git使用笔记的主要内容,如果未能解决你的问题,请参考以下文章

Git:将子模块文件检出到单个目录中

Git如何检出指定目录或文件

git 检出项目部分目录(稀疏检出)

git简明快速入门学习笔记

GIT入门笔记(20)- git 开发提交代码过程梳理

如何使用管道代码覆盖默认的 Jenkins Git 插件检出?