这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
基础操作
git commit
用于将 暂存区 的改动提交到本地的版本库中
每次使用 commit 都会在本地版本库生成一个40位的哈希值(使用SHA-1),这个哈希值也叫 commit-id
常用参数
-
git commit
-m[message]添加备注
-
git commit
-a对于本地未使用add添加到暂存区的文件也会提交
git branch
git的分支也非常轻量。它们只是简单地指向某个提交记录
因为创建再多的分支也不会造成存储或内存上的开销,并且按逻辑分解工作到不同的分支要比维护特别臃肿的分支简单多了,因此 早建分支!多用分支!
创建分支 git branch newname
切换分支 git checkout branchname
创建并切换分支 git checkout -b newname
将某个分支转移到某个特定节点 git branch -f main c1
删除/强制删除 分支/远程分支 git branch -d local_ranch_name / git brach -D loacl_ranch_name / git push origin --delete remote_branch_name
查看当前分支已合并/合并的分支 git branch --merged / git branch --no-merged
关联分支 git branch --set-upstream-to=origin/remote_branch your_branch / git branch -u origin/remote_branch branch
git merge
在Git中合并两个分支会产生一个特殊的提交记录,它有两个父节点:翻译过来就是,我要把这两个父节点以及它们所有的祖先都包含进来
当前分支与一个称为bugFix的节点合并 git merge bugFix
git rebase
实际上就是取出一系列的提交记录,复制它们,然后在另外一个地方逐步地放下去
rebase 的优势就是可以创造更线性的提交历史
在当前的提交记录上使用 git rebase main 即把当前节点往上一直找到和 main 的公共祖先,把这一段都弄到 main 的后面去
分离head
这是在项目的提交树上前后移动的几种方法
HEAD 是一个对当前检出记录的符号引用——即指向我正在其基础上进行工作的提交记录
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的
HEAD 通常情况下是指向分支名的,跟着分支名动。
分离的HEAD 就是让其指向了某个具体的提交记录而不是分支名。
如 原本是 HEAD -> main -> C1
变成了 HEAD -> C1 main -> C1
此时 HEAD 不会随着main分支的提交更改
使用的方法是 git checkout HASH值
相对引用
前面采用的哈希值制定提交记录很不方便,所以 Git 引入了相对引用
通过使用相对引用,我们可以从一个易于记忆的地方(如 bugFix 分支或者 HEAD )开始计算
介绍两个简单的用法:
- 使用
^向上移动 1 个提交记录 - 使用
~<num>向上移动多个提交记录
我们把这种符号加在引用名称的后面,表示让 Git 寻找制定提交记录的父提交。
如 main^ HEAD^^ main~4
撤销变更
在 Git 里撤销变更的方法很多。和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。
主要有两种方法用来撤销变更 —— 一是 git reset,还有就是 git revert。接下来咱们逐个进行讲解。
git reset 通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
如 git reset HEAD~1
虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!
为了撤销更改并分享给别人,我们需要使用 git revert。
使用 revert 之后,在我们要撤销的提交记录后面居然多了一个新提交!这是因为在新得提交记录里做的更改就是撤销! revert 之后就可以把你的更改推送到远程仓库与别人分享啦。
如 git revert HEAD ,就是生成新的提交记录撤销当前的提交情况