Git实战开发:使用Git进行日常开发详细指南

2021年3月8日16:27:57 发表评论 926 次浏览

本文概述

一、Git仓库和创建Git仓库

在上一篇文章中,我们介绍了Git开发的一些基本概念,Git就是备份文件,这一个个的备份又称为版本/快照/拷贝/副本,那么Git仓库是什么呢?就是一个数据库,这个数据库保存着文件的所有版本信息——也就是版本/快照仓库。

当你使用git init或git clone命令创建仓库的时候,Git会在当前文件夹下生成一个.git的文件夹,这个文件夹保存了版本的相关信息,或者你可以把它当成是这个项目的Git仓库。

Git仓库和.git文件夹

以上图片是一个onion的项目,在该文件夹下使用git init命令可以初始化一个git项目,这样你就可以开始你的Git开发了。

另一个方式是使用git clone <url>命令从远程仓库克隆一个git项目,通常远程仓库可以是github或gitee上的项目。

Github上的仓库也是git仓库,如果一个项目有多个人开发,那么每个人都有一个仓库,所以,其实Git仓库就是一个包含.git文件夹的项目,不同的项目可以有不同的仓库。而仓库里存储的就像我们保存一条记录到MySQL数据库一样——只不过Git仓库储存的每条记录是一个版本/快照。

使用Git进行日常开发就主要包括:如何操作单一的文件版本/快照(如创建、删除、修改、查看)、如何操作所有的文件所有版本的快照、以及本地仓库和远程仓库的交互。

Git基本操作

Git项目的工作流有三种:

  • 工作区(workspace):也就是我们写代码的地方,创建或更改一个文件。其中新建的文件还处于未跟踪的状态(untracked),对于一个未更改的文件,其状态为未更改状态(unmodified),已更改状态为modified。
  • 暂存区(staging area):这个区域缓存已更改的文件的快照/副本,我们可以使用git add命令将工作区中modified的文件添加到暂存区。
  • 本地仓库(local repository):使用git commit命令可以将暂存区缓存的快照最终提交到本地仓库。

我们使用git进行开发,其实就是对这三个区域的数据(快照/副本/版本)进行CRUD操作。

二、文件快照CRUD操作

Git版本仓库

如上图,Git的版本仓库的逻辑形式就是类似这样,最左边为初始版本,最右边为最新版本。如果你学过数据结构,那么会更容易理解,Git版本仓库就是一个有向树或有向图(directed graph),每个版本/快照就是一个节点,旧版本是新版本的父节点,一个版本节点可以有多个子版本节点:

  • 每个版本节点有一个SHA-1的散列值唯一对应;
  • 提交一个版本或快照就是创建一个新的节点;
  • Git中一般是不建议删除版本节点的,这是保护数据安全的必要性;
  • 版本节点的边为分支(branch),从一个版本开始可以有多个分支;
  • 在Git中有相关命令可以修改版本节点的位置和切换分支(更改生长方向);
  • Git中有一个HEAD指针,该指针指向当前的版本,默认指向最新版本。HEAD指针的意思是:表明当前处于分支X的Y版本上。

1、本地工作区文件的操作

使用git的第一个命令是git status或git status -s,这两个命令用来查看当前Git项目的文件所处的状态。

对于我们程序员,其基本操作就是创建或删除一个文件,然后修改该文件。其中:

  • 新建的文件Git是追踪不了的,你需要使用git add <fileName>命令才能令这个文件被Git追踪;如果你之前已经将该文件添加进Git,那么它会被正常追踪。
  • 对于新建的文件,如果你删除了它,是没有什么影响的;但是如果该文件之前已经被追踪了,删除了它,你需要把这个删除操作当做更改操作,你需要正常提交这个更改到git仓库中进行记录,可以使用git rm/add添加这个更改。
  • 我们可以在Git中使用 git mv from_file to_file更改文件名,如果你手动更改文件名会额外需要其它好几个命令,建议你还是使用这个命令更改文件名。
  • Git restore <file>可以放弃追踪该文件的更改。
  • Git status命令可以查看当前文件的状态,其中这个命令会有一些提示,例如告诉你如何将新快照添加到暂存区,或者放弃当前的更改。
  • Git diff可以查看文件更改了哪些内容。
  • Git使用一个.gitignore文件记录不追踪的文件,一些常用的可以参考这个github项目: HYPERLINK "https://github.com/github/gitignore" https://github.com/github/gitignore。
  • Git checkout可以恢复暂存区文件到工作区。

2、暂存区中的操作

暂存区中的快照是被git暂时缓存,还没被真正提交到仓库中,对暂存区中的数据操作命令通常需要使用选项--cached/--staged。

  • 使用git add <file>将一个文件新的快照添加到暂存区中;
  • 使用git restore –staged <file>放弃该文件暂存区快照。
  • Git diff –-cached可以查看暂存区中的快照和仓库中的快照的差异。

3、仓库中的操作

(1)使用git commit -m “message”可以提交暂存区中的快照到仓库中;

(2)git -amend可以将暂存区中的快照提交到仓库中,但不增加新的版本节点。

(3)git log --oneline –graph可以查看仓库的版本的详细历史。

4、版本/快照节点

(1)使用git log或git reflog查看版本的历史记录或版本的提交ID。

(2)git reset –hard <commit_id>用于将当前整个项目强制恢复到某个版本(也就是控制HEAD指针位置移动)。

(3)git reset –hard <commit_id> <file>用于将单个文件强制恢复为某个版本。

(4)移动HEAD的时候,若当前已经做了一些工作,可以使用git stash缓存当前工作空间,后面再使用git stash pop恢复工作空间。

三、Git给提交打标签

(1)Git tag命令用户查看当前仓库中的所有标签。

(2)git show <tag_name>可以详细查看某个标签。

(3)git tag < tag_name >用于创建一个轻量标签,默认打在当前HEAD指针指向的版本节点上。

(4)git tag -a v1.4 -m "my version 1.4"用于创建一个附注标签,它比轻量标签带有更相信的信息。

(5)git tag -a v1.2 9fceb02,给某个版本节点打标签。

打标签一般是标注某个重要的版本,而这个标签名一般就是我们常见的版本号。

四、远程仓库

常用的免费远程仓库有Github和国内的Gitee,或者你也可以自己搭建一个共享的Git仓库。使用远程仓库的第一步一般是要创建一个SSH Key,生成的命令如下:

$ ssh-keygen -t rsa -C "youremail@example.com"

然后一路回车即可,后面的步骤就是到你的Github或Gitee的账户里配置SSH Key即可。

本地仓库和远程仓库常见的内容如下:

  • git remote -v命令可以查看本地配置的远程仓库,git remote show <name>查看远程仓库。
  • git remote add <name> <url>,添加一个远程仓库,url是这个远程仓库的地址,name是该远程仓库的名字(常见的是origin),以后都可以使用这个name表示这个远程仓库。
  • git fetch <remote> ,将远程仓库的文件获取到本地,但不做其它操作。
  • git pull <remote>,将远程仓库的文件获取到本地,并进行合并。
  • git push <remote> <local>,将本地的分支推送到远程。
  • git push <remote> --tags,将本地的所有标签推送到远程,git中的标签是需要额外推送的。

五、总结

以上就是使用Git进行日常开发的一些基本概念,以及一些常用的命令。Git中的命令还有很多以及非常详细的说明,这里就不一一介绍了,主要是刚开始介绍的Git仓库的概念,把版本仓库看成一个版本图或树,那么用起来就很清晰了,其它就是命令的使用的问题了,也不用一一记着,不记得就去查文挡,或百度谷歌,用多了就记得了。

Good Luck!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: