写在开头

我太菜了,不会用 git……
阿西吧
学!必须学会!!!

感谢凉茶大佬的参考资料:Git系统学习笔记

先记住这一句话:git的原理是 直接记录快照,而非差异比较

  • git 像是把数据看作是对小型文件系统的一组快照。
  • 每次你提交更新,或在 git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。
  • 为了高效,如果文件没有修改,git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
  • git 对待数据更像是一个 快照流。

边学边记

准备工作

首先在GitHub创建新仓库learn-git

2021-10-30-12-44-18

然后使用gitbash克隆仓库到本地磁盘

2021-10-30-12-46-12

最后进入learn-git目录

2021-10-30-13-40-16

git config

当安装完 git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改。

1
2
git config --global user.name "codesensi"
git config --global user.email "codesensi@aliyun.com"

如果想要检查你的配置,可以使用 git config –list 命令来列出所有 git 当时能找到的配置。

1
git config –-list

不重要提示:我直接复制这个命令到gitbash中使用的话,会提示error: key does not contain a section: –-list,但是手动输入的没有问题,原因未知。我大胆猜测可能是编码问题吧,不深究了。

重要提示:编辑框不够一次性完整显示全部配置时,按回车可查看剩余配置项,最后按 Q 重返命令行

2021-10-30-12-54-17

如果看到了重复的变量名,这是因为会从不同的配置文件获取,只有最后找到的配置会生效。

还可以通过 git config <key> 来检查 Git 的某一项配置

1
git config user.name

2021-10-30-12-56-34

git status

要查看哪些文件处于什么状态,可以用 git status 命令。

使用 git status -s 命令或 git status –short 命令,将得到一种更为紧凑的格式输出。

1
git status -s

2021-10-30-13-21-02

  • **??**:新添加的未跟踪文件
  • A:新添加到暂存区中的文件
  • MM
    • 出现在 边的 M:表示修改过的文件,并放入了暂存区
    • 出现在 边的 M:表示该文件被修改过,但是还没放入暂存区

TIPS:一个文件的状态有两个 M,表示此文件第一次修改过后执行了git add放入了暂存区,但未执行git commit进行提交,此时进行了第二次修改,但未执行git add,即未放入暂存区。

git add

git add {path} 是一个多功能命令

理解为:添加内容到下一次提交中,而不是 将一个文件添加到项目中

包含如下功能(只列出部分):

  • 开始跟踪新文件
  • 把已跟踪的文件放到暂存区
  • 合并时把有冲突的文件标记为已解决状态

add {path}中的 path 可以是:

  • 文件名:默认为当前项目仓库的根路径的 文件,比如 xx.md
  • 路径名:根路径为当前项目仓库的根,比如 xx/xx.md
  • 目录:将递归将该目录下的所有文件都添加

git commit

git commit 会将暂存区的文件提交

提交时记录的是放在暂存区域的快照。

任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。

每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。

  • 不加任何参数的命令,会触发编辑器弹出,需要输入提交信息后,保存该文件,才会提交
  • -m:以命令行方式,直接携带提交信息提交
  • -a:跳过 git add 命令,自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
  • –amend:修正提交

git commit --amend 详解:

这个命令会将 暂存区中的文件提交

如果 自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息

文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。

例如,你 提交后 发现忘记了暂存某些需要的修改,可以像下面这样操作:

1
2
3
4
5
6
7
# 先提交了
$ git commit -m 'initial commit'
# 然后发现少提交了一个文件,这里 add 后
$ git add forgotten_file
# 再进行修正,会弹出之前的提交信息,供你进行修改
# 提交之后,效果就是修正了前面一个的提交,而不是多了一个新的提交
$ git commit --amend

最终你只会有一个提交,即第二次提交将代替第一次提交的结果。

git reset HEAD

例如,你已经修改了 两个文件 并且想要将它们作为 两次独立的修改提交,但是却意外地输入了 git add 暂存了它们两个。

使用此命令可以取消文件(两者其一或者全部)的暂存状态,使其回到修改未暂存的状态

git rm

  • 直接删除

要从 git 中移除某个文件,就必须要从 已跟踪文件清单中移除(确切地说,是从 暂存区域移除),然后提交。

可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

  • 手动删除

如果只是简单地 从工作目录中手工删除文件,实际上并没有从 git的暂存区将文件删除,或者说是git并没有记录文件被删除的操作。

此时仍需要执行一遍 git rm 将删除文件的操作记录到 git

  • 强制删除

如果文件的状态是 删除之前修改过并且已经放到暂存区,则 必须要用强制删除选项 -f(即 force 的首字母)。

这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据 不能被 git 恢复

  • 移除跟踪

把文件从 git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。

换句话说,你想让文件保留在磁盘,但是并不想让 git 继续跟踪。

这时使用 --cached 可达到这一目的。

常用命令笔记会持续更新,学到哪里记录到哪里。