Git学习笔记

Git学习笔记

基本概念

git 的所有操作基本上都是在本地执行

git 一般只添加数据

git 工作区

sequenceDiagram
  participant A as Working Directory
  participant B as Staging Area
  participant C as .git Repository
  A ->> B: git add
  B ->> C: git commit
  C ->> A: git checkout
  1. .git 仓库(git repository):用来保存项目的元数据对象数据库,从其他计算机clone时拷贝的是这里的数据
  2. 工作目录(working directory):从 git 仓库的压缩数据库中提取出来的文件,供用户编辑
  3. 暂存区(staging area):是.git 文件夹中的一个文件,保存下次将提交的文件信息列表索引

git 文件状态变化

sequenceDiagram
  participant untracked
  participant unmodified
  participant modified
  participant staged
  untracked ->> staged: git add
  unmodified ->> modified: edit file
  modified ->> staged: git add
  staged ->> unmodified: git commit
  unmodified ->> untracked: rm file

.gitignore文件可以使用Shell glob模式的正则表达式进行匹配。

git 操作

差异比较

  1. git diff比较工作目录与暂存区之间的差异
  2. git diff --cache比较暂存区与仓库之间的差异

提交

在 git 中任何已经提交的东西几乎总是可以恢复的,但是未提交的不行。

  1. git commit提交暂存区快照至仓库
  2. git commit -a自动将已跟踪过的文件暂存并提交

撤销

  1. git commit --amend撤销提交
  2. git reset HEAD <file> 撤销暂存区中的文件
  3. git checkout -- <file>撤销工作区文件更改

移除文件

  1. git rm从暂存区移除
  2. git rm --cached从暂存区和仓库移除

远程

  1. git remote -v查看远程仓库
  2. git remote add <shortname> <url>添加远程仓库至本地
  3. git fetch <remote-name>拉取远程分支的最新状态
  4. git remote rename <name1> <name2> 重命名远程分支
  5. git push origin --delete <tagName|branchName>删除远程标签或分支(远程不会立即删除,而是等到下一次 GC 时正式删除)

标签

  1. git tag -a v1.0 <commit id>给特定 commit 打标签
  2. git push origin v1.0 推送标签至远程分支

分支

git 的分支实质上就是指向提交对象的可变指针。

graph LR
  subgraph 提交
  f30ab --> 34ac2 --> 98ca9
  f30ab --> master
  master --> HEAD
  v1.0 --> f30ab
  end
  subgraph 快照
  98ca9 --> snapshotA
  34ac2 --> snapshotB
  f30ab --> snapshotC
  end
  1. git branch <branchName>创建分支
  2. git checkout <branchName>切换分支
  3. git branch -a查看所有分支
  4. git checkout -b <branchName>创建并切换分支
  5. git merge <branchName> 将选择的分支合并到当前分支,如果选择的分支是当前分支的直接下游则将当前分支的HEAD指针指向选择的分支
  6. git branch -d <branchName>删除本地分支
  7. git rebase <branchName> 提取选择的分支所引入的提交然后在当前分支上应用一次

git rebase 与 git merge 的区别

graph LR
  A[C1] --> B[C2] --> C[C3:master] & D[C4:develop]
  subgraph merge
  E[C1] --> F[C2] --> G[C3] & H[C4:develop] --> I[C5:master]
  end
  subgraph rebase
  a[C1] --> b[C2] --> c[C3] --> d[C4:master]
  end
  1. 无论是变基还是三方合并,整合的最终结果所指向的快照都是一样的,只不过提交历史不一样
  2. 变基是把一系列提交按照原有次序依次应用到另外一个分支上,而合并是把最终结果合并在一起

变基原则

  1. 只针对未提交至远程仓库的本地修改执行变基操作清理历史提交,不要对已经推送至远程的提交执行变基操作
  2. 如果执意要对远程仓库的提交执行变基操作,请告知其他团队成员使用git pull --rebase命令来拉取代码

存储与清理

  1. git stash将已跟踪的文件和暂存的改动保存到一个栈上
  2. git stash -u不仅存储已追踪的文件,还会存储未追踪的文件
  3. git stash list查看存储区
  4. git stash pop提取存储
  5. git drop stash@{x}移除暂存
  6. git clean -f -d 移除工作目录中所有未追踪的文件以及空子目录
  7. git clean -d -n 演习git clean将要移除哪些文件
  8. git clean -x -i -x移除包含进.gitignore 中的文件,-i以交互方式进行
作者

m3m0ry

发布于

2020-09-19

更新于

2020-09-20

许可协议

评论