Git基础内容
本文为git的基础内容教程,参考来源于git官方开源书籍gitpro。
本文默认在linux操作系统上运行,若是在其他系统,如windows,打开git bash即可。至于git的安装,请自行SFTW
本文为了简洁,删减了一些命令的输出展示,建议读者在阅读的过程中手动敲一下代码,查看命令的输出,有助于学习。
0. 配置和帮助
0.1 配置命令
- /etc/gitconfig 文件:是机器上所有用户通用的文件。要修改此内容,可以加上
--system
flag。 - ~/.gitconfig 文件:是当前用户使用的git配置文件。修改此内容,可以加上
--global
falg。 - 当前仓库中的配置文件(.git/config):只针对该仓库,要修改时在仓库目录下使用不加上述两种flag的命令即可
具体配置的优先级从上往下依次升高。
0.2 基础配置
git config [<flag>] user.name “你的名字”
git config [<flag>] user.email “你的邮箱”
上述引号内的内容,如果没有空格,双引号可以省略。
这个可能会使用,但是不设置也可以。
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 文件状态变化周期
git的文件状态变化周期是理解本地git仓库的关键
现在我们的机器上有了一个真实项目的 Git 仓库,并从这个仓库中检出了所有文件的工作副本。 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。
请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。
工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们。
编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 在工作时,你可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改,如此反复。
其中,未跟踪对应图中的Untracked
,已跟踪对应剩下三个.
1.2 git仓库初始化
首先,进入你想要建立仓库的文件夹,然后输入命令
然后git就会在当前文件夹下创建一个.git
隐藏文件夹。这个文件夹中有版本管理必须的文件,删除后该仓库就被销毁,之前的版本管理将丢失。
使用命令之后只是新建了一个git仓库,但是当前文件夹下的其他文件尚未被加入版本管理中,也就是处于Untracked
状态。
此时使用git add <文件名>
将你需要管理的文件加入到Stage
状态。然后再使用git commit -m "有关信息"
命令将其提交,此时该文件将转换为Unmodified
状态。
另一种建立仓库的方式是克隆别人的仓库,命令为:
该命令将直接拷贝别人的仓库到你的本地文件夹中。
2. 将文件更新记录到仓库
文件状态检查
使用以下命令可以检查当前git仓库下所有文件的状态:
如果在当前文件夹下新建文件,新建的文件将处于未跟踪状态。
跟踪新文件
使用如下命令跟踪新的文件,将其加入到暂存状态:
也可以使用该命令将处于已修改状态的文件加入到暂存。
忽略文件
有些文件你不想加入版本管理,但是又处于当前仓库中,你希望git不要处理这些文件,可以使用.gitignore文件来将其忽略。
.gitignore文件中写入你不想跟踪的文件,支持正则表达式。
查看文件修改的内容
当你想看处于修改状态的文件和已暂存的文件有哪些修改过的地方,可以使用以下命令:
最终以行首使用+
、-
来标识增加了哪一行,减少了哪一行。
若要比较已暂存的和上一次提交的内容,加入--staged
即可
提交
如果暂存区的文件已准备好,可以使用以下命令提交
该命令将启动你的默认编辑器(如果前面未设置的话)来对本次提交做一些备注,以便于区分。或者你可以直接使用如下命令直接提交而不启动编辑器:
使用以下命令可以不用暂存直接提交,它会将已经追踪的文件全部及提交。只需要加上-a
标志。
移除文件
使用以下命令可以将文件从版本控制系统中移除。
加上-f
表示强制移除,就算此文件已经在暂存区中。
移动文件
使用以下命令可以将文件在仓库中移动或者重命名
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常用属性。--since,--after,--until,--before
:时间支持两种格式。一种为具体的时间,如“2022-08-23
”;另一种为相对时间,如”2 years 1day 3 minutes ago
”。4.撤销操作
覆盖上次提交
取消暂存的文件
撤销对文件的修改
5.远程仓库使用
查看远程仓库
使用git clone 命令时会自动将克隆仓库的url加入远程仓库。默认简写为origin
添加远程仓库
从远程仓库抓取与拉取
此命令访问远程仓库,抓取本地还没有的数据。
抓取所有远程引用,然后将远程master分支合并到本地master分支。
推送代码到远程仓库
需要有该远程仓库的写入权限,并且从上次拉取仓库前都没有人推送。否则需要先拉取代码进行合并,然后才能推送。
查看某个远程仓库
远程仓库的重命名与移除
删除了远程仓库,其远程分支和相应的配置信息也会被删除
6.打标签
列出标签
只使用git tag
时,列出所有标签。当你想要查看指定的标签时,可以加上-l
然后再跟上你想要查找的标签名,标签名支持通配符。当不用于查找特定名字时,-l
是可选的,但是要带上查找的特定名字时,就必须带上-l
。
创建标签
标签主要有两种,一种是轻量标签(lightweight),另一种是附注标签(annotated)。
当不选用hashcode
时,默认给上次提交打标签,当需要给过去的版本打标签时可以加上对应版本的hashcode
。
使用git show <tagname>
可以看到标签信息和对应的版本的信息
共享标签
使用git push
命令时默认不会将标签上传,需要我们像共享分支一样将其发送到远程仓库。
如果想一次性将所有不在远程仓库的标签全部推送上去,可以使用git push --tags
命令。但是这个会将轻量标签和附注标签都推送上去。
删除标签
或者
git push <remote> –delete <tagname>
7.git别名
例如git config --global alias.co checkout
,运行后当你运行git co ...
命令时就相当与运行git checkout ...
。
git的基础内容就到此结束,更多有关git内容请看别的文章~