Contents

Git基础内容

本文为git的基础内容教程,参考来源于git官方开源书籍gitpro。

本文默认在linux操作系统上运行,若是在其他系统,如windows,打开git bash即可。至于git的安装,请自行SFTW

本文为了简洁,删减了一些命令的输出展示,建议读者在阅读的过程中手动敲一下代码,查看命令的输出,有助于学习。

0. 配置和帮助

0.1 配置命令

git的配置命令为
git config <flag> <your command>
git共有三个配置文件:
  1. /etc/gitconfig 文件:是机器上所有用户通用的文件。要修改此内容,可以加上--system flag。
  2. ~/.gitconfig 文件:是当前用户使用的git配置文件。修改此内容,可以加上--global falg。
  3. 当前仓库中的配置文件(.git/config):只针对该仓库,要修改时在仓库目录下使用不加上述两种flag的命令即可
    具体配置的优先级从上往下依次升高。

0.2 基础配置

配置用户信息

git config [<flag>] user.name “你的名字”

git config [<flag>] user.email “你的邮箱”

上述引号内的内容,如果没有空格,双引号可以省略。

配置默认的编辑器
git config [] core.editor “你想使用的编辑器”

这个可能会使用,但是不设置也可以。

Tips
想要查看当前的配置信息,可以使用git config --list命令。
如果想要查看某一项配置,可以使用git config <配置名>。例如git config user.name

0.3 获取帮助

获取帮助的形式有以下三种,都是等价的:

git help <verb>

git <verb> –help

man git-<verb>

上述verb的内容为你想查看的git命令,如git help config或者man git-config都是可以的。注意第三种,需要用-将其连接起来。

1. Git基础

1.1 文件状态变化周期

/8AF8422685F6C52A5B4CBB431A7D0088.png
文件状态变化周期

git的文件状态变化周期是理解本地git仓库的关键

以下为《git pro》中文版翻译对此的介绍:

现在我们的机器上有了一个真实项目的 Git 仓库,并从这个仓库中检出了所有文件的工作副本。 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。

请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。

工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们。

编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 在工作时,你可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改,如此反复。

其中,未跟踪对应图中的Untracked,已跟踪对应剩下三个.

1.2 git仓库初始化

首先,进入你想要建立仓库的文件夹,然后输入命令

仓库初始化
git init

然后git就会在当前文件夹下创建一个.git隐藏文件夹。这个文件夹中有版本管理必须的文件,删除后该仓库就被销毁,之前的版本管理将丢失。

使用命令之后只是新建了一个git仓库,但是当前文件夹下的其他文件尚未被加入版本管理中,也就是处于Untracked状态。
此时使用git add <文件名>将你需要管理的文件加入到Stage状态。然后再使用git commit -m "有关信息"命令将其提交,此时该文件将转换为Unmodified状态。

另一种建立仓库的方式是克隆别人的仓库,命令为:

克隆仓库
git clone <url> [name]

该命令将直接拷贝别人的仓库到你的本地文件夹中。

2. 将文件更新记录到仓库

文件状态检查

使用以下命令可以检查当前git仓库下所有文件的状态:

状态检查
git status

如果在当前文件夹下新建文件,新建的文件将处于未跟踪状态。

跟踪新文件

使用如下命令跟踪新的文件,将其加入到暂存状态:

Stage
git add <文件名>

也可以使用该命令将处于已修改状态的文件加入到暂存。

忽略文件

有些文件你不想加入版本管理,但是又处于当前仓库中,你希望git不要处理这些文件,可以使用.gitignore文件来将其忽略。
.gitignore文件中写入你不想跟踪的文件,支持正则表达式。

查看文件修改的内容

当你想看处于修改状态的文件和已暂存的文件有哪些修改过的地方,可以使用以下命令:

git diff

最终以行首使用+-来标识增加了哪一行,减少了哪一行。

若要比较已暂存的和上一次提交的内容,加入--staged即可

提交

如果暂存区的文件已准备好,可以使用以下命令提交

提交
git commit

该命令将启动你的默认编辑器(如果前面未设置的话)来对本次提交做一些备注,以便于区分。或者你可以直接使用如下命令直接提交而不启动编辑器:

不启动编辑器提交
git commit -m “备注信息”

使用以下命令可以不用暂存直接提交,它会将已经追踪的文件全部及提交。只需要加上-a标志。

移除文件

使用以下命令可以将文件从版本控制系统中移除。

git rm
git rm <文件名>

加上-f表示强制移除,就算此文件已经在暂存区中。

移动文件

使用以下命令可以将文件在仓库中移动或者重命名

git mv
git mv <文件名>
注意

git mv 命令的意义在于其操作相当于没有该命令时的以下三条命令,且下面的命令在git中记录也并不像git mv那般简单清晰。

mv PathA PathB
git rm PathA
git add PathB

3. 查看历史记录

git中查看历史记录的核心代码为:

git log

这个命令的flag比较多,但是大致可以分为两类。一类是直接使用的类型,这种类型可以直接加上flag后直接使用。另一类是加上flag后需要带上一些具体的值来使用。

不用带值的flag

flag 描述
-<n> n用具体的数字,显示最近的n条提交记录
-p,–patch 显示每次提交所引入的差异
–stat 在每次提交下面列出该次提交的统计数据,最后还有一个总结
–relative-date 使用相对时间而不是具体的时间
–graph 增加一些ASCII字符以图形显示分支与合并历史

带值的flag

flag 描述
–pretty 自定义输出的格式,可选项为oneline,short,full,fuller,format
–since,–after,–until,–before 指定时间的提交
–author 指定作者与给定字符串匹配的提交
–commiter 指定提交者与给定字符串匹配的提交
–grep 指定提交说明与给定字符串匹配的提交
-S 指定添加或删除内容与给定字符串匹配的提交
解释
--pretty:oneline表示讲内容简化,将每次提交使用一行显示;format是重定义输出格式,可以给一个字符串指定输出内容,如git log --pretty=format:"%h %s",或者等价地git log --pretty="%h %s"。下面将给出format常用属性。
/IMG_0376.png
–pretty=format常用格式
解释
--since,--after,--until,--before:时间支持两种格式。一种为具体的时间,如“2022-08-23”;另一种为相对时间,如”2 years 1day 3 minutes ago”。

4.撤销操作

覆盖上次提交

此操作会覆盖上次的提交
git commit –amend

取消暂存的文件

Note
git reset HEAD <file>

撤销对文件的修改

Note
git restore <file>

5.远程仓库使用

查看远程仓库

Note
git remote [-v]
没有-v命令的时只是列出远程仓库的简写名,加上-v命令时会列出远程仓库的简写名和对应的url。

使用git clone 命令时会自动将克隆仓库的url加入远程仓库。默认简写为origin

添加远程仓库

Note
git remote add <shortname> <url>

从远程仓库抓取与拉取

Note
git fetch <remote>

此命令访问远程仓库,抓取本地还没有的数据。

Note
git pull <remote>

抓取所有远程引用,然后将远程master分支合并到本地master分支。

推送代码到远程仓库

Note
git push <remote> <branch>

需要有该远程仓库的写入权限,并且从上次拉取仓库前都没有人推送。否则需要先拉取代码进行合并,然后才能推送。

查看某个远程仓库

Note
git remote show <remote>

远程仓库的重命名与移除

重命名
git remote rename <oldname> <newname>
移除
git remote remove <remote>

删除了远程仓库,其远程分支和相应的配置信息也会被删除

6.打标签

列出标签

Note
git tag [-l] [tagname]

只使用git tag时,列出所有标签。当你想要查看指定的标签时,可以加上-l然后再跟上你想要查找的标签名,标签名支持通配符。当不用于查找特定名字时,-l是可选的,但是要带上查找的特定名字时,就必须带上-l

创建标签

标签主要有两种,一种是轻量标签(lightweight),另一种是附注标签(annotated)。

附注标签
git tag -a <tagname> [hashcode] -m <message>

当不选用hashcode时,默认给上次提交打标签,当需要给过去的版本打标签时可以加上对应版本的hashcode

使用git show <tagname>可以看到标签信息和对应的版本的信息

轻量标签
git tag <tagname> [hashcode]

共享标签

使用git push命令时默认不会将标签上传,需要我们像共享分支一样将其发送到远程仓库。

共享单个标签到远程仓库
git push <remote> <tagname>

如果想一次性将所有不在远程仓库的标签全部推送上去,可以使用git push --tags命令。但是这个会将轻量标签和附注标签都推送上去。

删除标签

删除本地仓库的标签
git tags -d <tagname>
删除本地标签后推送到远程仓库
git push <remote> :refs/tags/<tagname>
或者
git push <remote> –delete <tagname>

7.git别名

设置别名
git config –global alias.<shortname>

例如git config --global alias.co checkout,运行后当你运行git co ...命令时就相当与运行git checkout ...

git的基础内容就到此结束,更多有关git内容请看别的文章~