01.Git从放弃到入门:快速入门

1,402 阅读5分钟

0x.00 前言

Git 是一个功能强大、复杂的分布式VCS(version control system)版本控制系统。它是针对开源项目的开发模式设计的,它极其适合管理大项目,有着令人难以置信的非线性分支管理系统。它的出现改变了软件开发流程,大大地提高了开发流畅度。随着Git代码托管服务越来越流行(github、gitlab、gitee),Git 成为了当今主流源代码管理首选,很多公司、个人将项目上传至 Git平台进行代码托管。

Git优缺点如此明显,爱它的人爱死,恨它的人恨死。它功能强大毋庸置疑,但是它概念繁多复杂且命名随意、命令行语法命名随意且不一致、命令行帮助提示晦涩难懂、缺乏良好的封装等等缺点让人无力吐槽。

虽然一般情况下只需要掌握git的几个常用命令即可满足日常工作,但是在使用的过程中难免会遇到各种复杂的情况,不得不面对底层实现,这时候经常需要搜索命令和参数,非常麻烦,让初学者头大。

对于初学者,每次代码合并提交时都是心跳加速的时候!我的代码哪里去了呢? 咋没保存成功?!白忙活了! 怎么办还能找回吗? 返回的提示信息啥意思啊 我到底需要干什么啊?....

瑕不掩瑜,优秀的工具软件还是需要学习掌握的。接下来我们化繁从简,通过融入示例情景的方式学习Git命令,实现快速入门。

本系列更多文章详见专栏 📚 Git从放弃到入门

0x.01 环境安装

Git官网 提供了下载、文档和其他资源:

Windows

操作系统是 Windows,下载git for windows进行安装。

Mac

操作系统是 Mac OS , 使用 brew 命令来安装。git for MacOS

$ brew install git 

git --version 版本确认

使用 git --version 命令查看环境是否成功安装,返回版本信息。

$ git --version

git version 2.28.0

0x.02 git config 配置

用户信息

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改。

$ git config --global user.name "your name"
$ git config --global user.email "your_email@xxx.com"

检查配置信息

使用 git config --list 命令来列出所有 Git 配置。

//查看所有配置项
$ git config -l , --list  
...
user.name=Anduril
user.email=egger@outlook.com
...

core.autocrlf

解决跨平台格式化不同导致的各种问题。Windows 使用回车(CR)和换行(LF)两个字符来结束一行,而 macOS 和 Linux 只使用换行(LF)一个字符,会极大地扰乱跨平台协作。

Unix/Mac用户

# 提交时转换为LF,检出时不转换
$ git config --global core.autocrlf input
# 提交包含混合换行符的文件时给出警告
$ git config --global core.safecrlf warn

Windows 用户

# 提交时转换为LF,检出时转换CRLF
$ git config --global core.autocrlf true
# 提交包含混合换行符的文件时给出警告
$ git config --global core.safecrlf warn

0x.03 创建项目

接下来从头开始创建 git 仓库(repository)。

创建目录/文件

创建一个名为helloworld的空目录,然后在该目录中创建一个包含以下内容的文件 helloworld.html

$ mkdir helloworld
$ cd helloworld
 
// 新建 helloworld.html,内容如下
Hello, World!

git init 初始化仓库

运行git init初始化仓库。 image.png

使用 git add 命令开始跟踪页面,并处于暂存状态。使用git commit提交至仓库中。

git add helloworld.html
git commit -m "首次提交"

image.png

0x.04 git status 检查存储库的状态

运行 git status 检查存储库的当前状态。

image.png

0x.05 进行更改

更改helloworld.html页面内容。

<h1>Hello, World!</h1>

使用 git status 检查工作目录的状态。

image.png

返回结果内容

  1. helloworld.html文件已更改,但尚未提交到仓库 。
  2. 提示下一步操作。提交 git add <file> 或者撤销 git restore <file> 更改。

0x.06 git add 暂存更改

运行 git addhelloworld.html 放到暂存区,然后再检查目录状态.

$ git add helloworld.html
$ git status

git add 是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。

helloworld.html 已暂存。 它在仓库中时临时的,可以使用 git reset HEAD <file>... 取消暂存这些更改。

image.png

暂存与提交

通过分开暂存和提交步骤,可以更加灵活精确的纪录每一个更改提交。

假设您已编辑了三个文件。你可以一次提交所有更改,也可以分开单独提交。

$ git add a.html
$ git add b.html
$ git commit -m "a和b的更改"

$ git add c.html
$ git commit -m "c单独更改"

0x.07 git commit 提交更改

git commit 增加 -m 标识可以提交描述信息。 直接输入git commit 默认编辑器会打开 COMMIT_EDITMSG 文件,输入提交信息,关闭文件后提交成功(如果空信息则终止提交)。 image.png

编辑器打开顺序:

  1. GIT_EDITOR 环境变量
  2. core.editor 配置设置
  3. VISUAL 环境变量
  4. EDITOR 环境变量

提交后,查看目录状态。

image.png

文件更改而不是文件

Git聚焦的是对文件的更改,而不是文件本身。使用 git add命令并不是告诉git将文件添加到仓库中,而是记录文件的当前状态,以便稍后提交。

更改 helloworld.html 内容。

<html>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

暂存下更改。

$ git add helloworld.html

再次修改 helloworld.html 内容。

<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

git status 查看当前状态

image.png

helloworld.html 在状态中列出了两次。第一次更改已经暂存并准备提交。第二次更改未暂存。如果现在进行提交,则不会将第二次的更改保存到仓库中。

提交下进行验证

$ git commit -m "添加HTML标签"
$ git status

仍提示由更改尚未暂存。

image.png

提交第二次更改。

# 将当前目录所有更改暂存最便捷方法。 
$ git add .    
# 检查状态 确保不会添加任何不应添加的文件
$ git status
# 提交更改
$ git commit -m "添加 HTML header"

image.png

0x.08 git log 查看提交历史

使用git log 命令何查看项目的提交历史。不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

可以看到对仓库所作的总共 4 次提交。

image.png

选项 --pretty

--pretty 选项可以使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。

单行展示

oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。

git log --pretty=oneline

image.png

条件过滤

有许多选项可以过滤出匹配指定条件的提交,控制显示结果。

# 列出最多两条提交纪录
$ git log --pretty=oneline --max-count=2
# 列出最近5分钟内的所有提交
$ git log --pretty=oneline --since='5 minutes ago'
# 列出5分钟之前的所有提交
$ git log --pretty=oneline --until='5 minutes ago'
# 列出指定作者的提交
$ git log --pretty=oneline --author=<your name>
# 列出所有分支的提交
$ git log --pretty=oneline --all

格式化

定制记录的显示格式。 --graph告诉 git 以 ASCII 图形布局的形式显示提交树,--date=short 保持日期格式简短美观。

$ git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short

git log --pretty=format 常用的选项

选项说明
%H提交的完整哈希值
%h提交的简写哈希值
%d提交装饰(例如 (HEAD -> master))
%T树的完整哈希值
%t树的简写哈希值
%P父提交的完整哈希值
%p父提交的简写哈希值
%an作者名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 --date=选项 来定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期(距今多长时间)
%s提交说明

作者 vs 提交者
作者指的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库的人。 所以,当你为某个项目发布补丁,然后某个核心成员将你的补丁并入项目时,你就是作者,而那个核心成员就是提交者。

📚参考&关联阅读

Pro Git Online

关注专栏

如果本文对您有所帮助请关注➕、 点赞👍、 收藏⭐!您的认可就是对我的最大支持!

此文章已收录到专栏中 👇,可以直接关注。