跳转至

Git 学习笔记一

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 checkoutgit switch 命令来改变指向 当在 master 分支上产生新 commit 时自动向前移动
常见状态 HEAD -> master -> commitHEAD -> commit (分离头指针) master -> commit
目的 标识用户当前的工作区状态 标识一条主要的、稳定的开发线
  • git reset --soft A (温柔的重置)
  • git reset --mixed A (中等重置 - 默认模式
  • git reset --hard A (硬核重置 - 危险!
  • reflog最后的安全网

参考链接:

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