跳转至
技 · 格物札记

Git 学习笔记一

Mon 的个人花园 正在计算 阅读模式

1 Git 初始化

1.1 初始化

git init

运行后,你会看到提示说“Initialized empty Git repository in .../.git/”。这表示 Git 已经在你的项目里安家了。它创建了一个名为 .git 的隐藏文件夹,这就是我们前面说的“档案柜”。

1.2 暂存提交

git add index.html

这个命令是告诉 Git:“嘿,请把 index.html 这个文件准备好,我下一步就要把它存到档案里了。” 这个“准备区”在 Git 里叫“暂存区”。

git commit -m "创建了网站首页"

Git 会拍下一个快照,永久保存在你的“档案柜”里。-m 后面跟着的文字是“提交信息”,是你对这次改动的描述,比如“创建了网站首页”或者“修复了一个 bug”,这非常重要,能让你以后快速看懂每次都改了什么。

1.3 其它

git config 命令用来配置 Git 的一些设置,其中最重要的就是告诉 Git 你是谁。它有三个主要的级别(参数),区别在于“作用范围”:

  • --local:只对当前这一个项目有效。配置信息保存在当前项目目录下的 .git/config 文件里。比如你给公司项目设置公司的邮箱,给个人项目设置个人邮箱。
  • --global:对当前电脑用户的所有项目都有效。这是最常用的!配置信息保存在你的用户主目录下的一个文件里(比如 ~/.gitconfig)。我们第一次安装 Git 时,设置的就是全局的姓名和邮箱。
  • --system:对这台电脑上的所有用户都有效。这个用得比较少,通常是服务器管理员才会配置。

我们可以设置别名:

git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.lg "log --oneline --graph --decorate --all"

设置完之后,你就可以这样用了:

  • git st 就等同于 git status
  • git ci -m "..." 就等同于 git commit -m "..."
  • git lg 会给你一个非常酷炫、清晰的单行历史日志图。

2 Git 暂存区

命令 作用 比喻
git add <file> 将工作区的修改添加到暂存区 把书桌上写好的手稿,放进“最终稿文件夹”
git commit 将暂存区的所有内容提交到仓库 命令出版社,将“最终稿文件夹”里的所有内容印刷存档
git diff 查看工作区和暂存区的差异 对比“书桌”和“最终稿文件夹”
git diff --staged 查看暂存区和仓库最新版本的差异 对比“最终稿文件夹”和“已出版的最新版”
git commit -a (不推荐) 跳过add,直接提交所有已跟踪文件的修改 贪图方便,把书桌上所有东西(除了新来的)一股脑丢给出版社
git stash 临时保存工作区和暂存区的修改,清空工作区 把书桌上所有东西临时塞进抽屉,以清空桌面
git stash pop 恢复最近一次stash的内容 把抽屉里的东西再拿出来放回书桌

3 Git 对象

  • Blob (数据对象)--内容
  • Tree (树对象)--目录清单
  • Commit (提交对象)--快照

SHA1 哈希值就是根据对象的内容算出来的一个绝对唯一的ID,用来保证数据的完整性和唯一性。

4 Git 重置

把你的项目历史想象成一条长长的路径,路径上有很多存档点(commit)。master 是一个旗子,插在最新的存档点上。而 HEAD 就是一个“你在这里”的地图标志,告诉你当前正站在哪个存档点上。

特性 HEAD master
本质 指向当前工作位置的指针 默认主分支的名称,也是一个指针
指向对象 可以指向一个分支(如 master),也可以直接指向一个commit 始终指向 master 分支上的最新 commit
如何移动 通过 git checkout 或 git switch 命令来改变指向 当在 master 分支上产生新 commit 时自动向前移动
常见状态 HEAD -> master -> commit 或 HEAD -> commit (分离头指针) master -> commit
目的 标识用户当前的工作区状态 标识一条主要的、稳定的开发线
  • git reset --soft A (温柔的重置)
  • git reset --mixed A (中等重置 - 默认模式)
  • git reset --hard A (硬核重置 - 危险!)
  • reflog 是最后的安全网

参考链接:

https://www.worldhello.net/gotgit/