Git 使用基础
这篇文章记录了 Git 的使用基础,记录使用 Git 中遇到的一些问题,持续更新笔记。
每个项目都有一个 .git 目录,它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
git add
在我们修改了项目后,我们首先需要先将变化的内容添加到暂存区,git add 可以将为跟踪的文件或以跟踪但修改过的文件添加到暂存区。
1 | git add a.txt |
提交 git commit
在合适的时候我们使用需要将暂存区的内容提交到 git 仓库中。
1 | git commit |
通过该命令 git 会打开默认的编辑器让你输入自己的提交注解。
1 | git commit -m "提交注解" |
通过 -m 参数提交注解
1 | git commit -a -m "注解内容" |
通过参数 -a 我们可以跳过暂存区而直接提交的 git 仓库。
分支 Branch
创建分支
1 | git branch 分支名 |
创建分支并切换到该分支
1 | git checkout -b gd32 |
查看所有分支
1 | git branch -a |
查看当前分支(前面为 * 的分支)
1 | git branch |
切换分支
1 | git checkout 分支名 |
git 查看配置命令
config 配置有system级别 global(用户级别) 和local(当前仓库)三个 设置先从system-》global-》local 底层配置会覆盖顶层配置 分别使用–system/global/local 可以定位到配置文件
查看所有配置命令
1 | git config |
查看系统 config
1 | git config --system --list |
查看当前用户(global)配置
1 | git config --global --list |
查看当前仓库配置信息
1 | git config --local --list |
三种状态
现在请注意,如果你希望后面的学习更顺利,请记住下面这些关于 Git 的概念。 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。
- 已修改表示修改了文件,但还没保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
工作区
工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git仓库
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
克隆仓库
克隆仓库的命令是 git clone 。 比如,要克隆 Git 的链接库 libgit2,可以用下面的命令:
1 | git clone https://github.com/libgit2/libgit2 |
这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的 libgit2 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。
如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以通过额外的参数指定新的目录名:
1 | git clone https://github.com/libgit2/libgit2 mylibgit |
这会执行与上一条命令相同的操作,但目标目录名变为了 mylibgit。
跟踪新文件
使用命令 git add 开始跟踪一个文件。 所以,要跟踪 README 文件,运行:
1 | git add README |
git status -s
git status 命令的输出十分详细,但其用语有些繁琐。 Git 有一个选项可以帮你缩短状态命令的输出,这样可以以简洁的方式查看更改。 如果你使用 git status -s 命令或 git status –short 命令,你将得到一种格式更为紧凑的输出。
1 | git status -s |
新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态。例如,上面的状态报告显示: README 文件在工作区已修改但尚未暂存,而 lib/simplegit.rb 文件已修改且已暂存。 Rakefile 文件已修,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分。
忽略文件 .gitignore
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。 来看一个实际的 .gitignore 例子:
1 | cat .gitignore |
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉 Git 忽略所有名字以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就为你的新仓库设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
我们再看一个 .gitignore 文件的例子:
1 | # 忽略所有的 .a 文件 |
克隆 Clone
正常克隆一个仓库到本地
1 | git clone https://github.com/zsf90/GD32F150C8T6-EXAMPLE.git |
克隆指定分支到本地
1 | git clone -b gd32-led01 https://github.com/zsf90/GD32F150C8T6-EXAMPLE.git LED |
克隆指定分支是要在后面指定分支要在本地显示的名字。