Learn Git Branching笔记--本地仓库
这是我的第一份笔记,学习git和github,之后还会尝试开源,规划的太晚了,加油吧 学习git是看鱼皮的推荐,用的Learning Git branching
网址是https://learngitbranching.js.org/?locale=zh_CN
准备学习git的朋友可以尝试,确实蛮好的,一起加油
提交
git commit
提交
创建分支,切换分支
git branch name
创建新分支
git checkout name
切换到分支 git switch name
git checkout -b name
创建新分支并切换到新分支
合并分支
第一种:
git merge name 将name支线合并到main中
第二种:
第二种合并分支的方法是 git rebase
。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
git rebase name
复制当前支线
,新建提交到name下。复制的支线可以有很多提交,但是不能为name的父节点以上。
git rebase name name1
:复制name1支线
,新建提交到name下,非常好用,你可以理解为把name1复制(移)到name底下,解决多次Rebase的关键方法。
在同一支线上,main在name的父节点或以上时,可以用git rebase name main
来把main移到name的位置。
相对引用
^ 向上移动一个提交记录,就是指向父节点 ~<num> 向上移动多个提交记录
分离Head,利用Head向上移动
git checkout Head^
强制修改分支位置 -f
git branch -f name C4
把name强制移动到C4上
git branch -f name HEAD^
把name强制移动到HEAD的父节点上
撤销变更
git reset
通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset
向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
git reset HEAD~1
回退到上一节点,用来撤销本地分支
虽然在你的本地分支中使用 git reset
很方便,但是这种“改写历史”的方法对大家一起使用的远程分支
是无效的哦!
为了撤销更改并分享给别人,我们需要使用 git revert
。
git revert HEAD
新增一个提交记录与上上个提交记录相同,用来撤销上一个提交记录,用来撤销远程分支
选择复制
git cherry-pick <提交号>...
选择支线节点号复制到当前支线(HEAD)下
git cherry-pick <提交号> C1 C3
交互式的 rebase
交互式 rebase 指的是使用带参数 --interactive
的 rebase 命令, 简写为 -i
如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
当 rebase UI界面打开时, 你能做3件事:
- 调整提交记录的顺序(通过鼠标拖放来完成)
- 删除你不想要的提交(通过切换
pick
的状态来完成,关闭就意味着你不想要这个提交记录) - 合并提交。 遗憾的是由于某种逻辑的原因,我们的课程不支持此功能,因此我不会详细介绍这个操作。简而言之,它允许你把多个提交记录合并成一个。
git rebase -i HEAD~<num>
git rebase -i HEAD~4
复制包含HEAD往上的四个节点,并在第五个节点下粘贴新的支线(可以更改顺序以及删除某个节点)
标签-tag
它们可以永久地将某个特定的提交命名为里程碑,然后就可以像分支一样引用了。 更难得的是,它们并不会随着新的提交而移动。你也不能切换到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。
git tag name C1
给C1加上标签name
Git Describe
由于标签在代码库中起着“锚点”的作用,Git 还为此专门设计了一个命令用来描述离你最近的锚点(也就是标签),它就是 git describe
!
Git Describe 能帮你在提交历史中移动了多次以后找到方向;当你用 git bisect
(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时, 可能会用到这个命令。
git describe
的语法是:git describe <ref>
<ref>
可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会使用你目前所在的位置(HEAD
)。
它输出的结果是这样的:<tag>_<numCommits>_g<hash>
tag
表示的是离 ref
最近的标签, numCommits
是表示这个 ref
与 tag
相差有多少个提交记录, hash
表示的是你所给定的 ref
所表示的提交记录哈希值的前几位。
当 ref
提交记录上有某个标签时,则只输出标签名称
选择 parent 提交记录
操作符 ^
与 ~
符一样,后面也可以跟一个数字。
但是该操作符后面的数字与 ~
后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个 parent 提交。还记得前面提到过的一个合并提交有两个 parent 提交吧,所以遇到这样的节点时该选择哪条路径就不是很清晰了。
Git 默认选择合并提交的“第一个” parent 提交,在操作符 ^
后跟一个数字可以改变这一默认行为。
比如
git checkout HEAD^1
:HEAD会指向C4
git checkout HEAD^2
:HEAD会指向C5
当然,~
和^
是支持链式操作的,比如
git checkout HEAD~^2~2
: