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 提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。

比如

alt

git checkout HEAD^1:HEAD会指向C4

git checkout HEAD^2:HEAD会指向C5

当然,~^是支持链式操作的,比如 alt

git checkout HEAD~^2~2alt

全部评论

相关推荐

07-02 15:52
滨州学院 财务
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务