【learnGitBranching】04杂项

GitHub最受欢迎的交互式Git学习教程

  • 在线学习地址:https://pcottle.github.io/learnGitBranching/
  • 仓库地址:https://github.com/pcottle/learnGitBranching

只取一个提交记录

不保留分支中的某些提交记录(日志打印等调试语句)

教学

  • 使用git rebase -igit cherry-pick即可

练习

确保 main 分支能得到 bugFix 分支上的相关提交

方法1:

git checkout main
git cherry-pick C4

4-1

方法2:

git rebase -i HEAD~3

4-2

git checkout main
git rebase bugFix

提交的技巧1

对某个以前的提交记录进行一些小小的调整

教学

一种思路:

  • 先用 git rebase -i 将提交重新排序,然后把我们想要修改的提交记录挪到最前

  • 然后用 git commit --amend 来进行一些小修改

  • 接着再用 git rebase -i 来将他们调回原来的顺序

  • 最后我们把 main 移到修改的最前端(用你自己喜欢的方法)

——对于 ' 的数量上的不同,并不纳入对比范围内

git commit --amend :对上一次提交有修改,可以修改文件也可以修改说明,不产生新的commit

练习

git rebase -i HEAD~2  # 交换caption分支的C2和C3
git commit --amend  # 重新提交C2
git rebase -i HEAD~2  # 交换caption分支的C3和C2

git branch -f main  # 更新main分支到最新,空白默认为当前HEAD
# 或
git checkout main  # 切换到main分支
git rebase caption  # 更新main分支到最新caption

4-3

——本关不允许使用cherry-pick,否则的话直接

git checkout main

# 可以达到main分支要求
git cherry-pick C2 C3

# 达到修改C2提交的要求
git cherry-pick C2
git commit --amend
git cherry-pick C3

提交的技巧2

上一关进行了两次排序,而这有可能造成由 rebase 而导致的冲突

演示

  • cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题

练习

通过 --amend 改变提交记录 C2,但你不能用 rebase -i

Git Tags

  • 分支很容易被人为移动,并且当有新的提交时,它也会移动。分支很容易被改变,大部分分支还只是临时的,并且还一直在变。
  • 有没有什么可以永远指向某个提交记录的标识?

教学

  • Git 的 tag 可以(在某种程度上 —— 因为标签可以被删除后重新在另外一个位置创建同名的标签)永久地将某个特定的提交命名为里程碑,然后就可以像分支一样引用了。
  • 它们并不会随着新的提交而移动。你也不能切换到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。——在tag上进行新git commit --amend会创建新分支。

演示

  • git tag v1 C1:我们将这个标签命名为 v1,并且明确地让它指向提交记录 C1,如果你不指定提交记录,Git 会用 HEAD 所指向的位置。

练习

按照目标建立两个标签,然后切换到 v1 上面,要注意你会进到分离 HEAD 的状态 —— 这是因为不能直接在v1 上面做 commit。

git tag v0 C1
git tag v1 C2
git checkout v1

4-4

Git Describe

用来描述离你最近的锚点(也就是标签)

教学

  • 场景:当你用 git bisect(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令。

  • 语法是:git describe <ref>

    • <ref> 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD
  • 输出结果为:<tag>_<numCommits>_g<hash>

    • tag 表示的是离 ref 最近的标签, numCommits 是表示这个 reftag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
    • ref 提交记录上有某个标签时,则只输出标签名称

演示

  • git tag v2 C3打好标记
  • git describe main输出:v1_2_gC2
  • git describe side输出:v2_1_gC4

4-5

练习

  • 随意指定几个位置来查看即可
  • 都是往上找标签
  • 随意提交就可以过关

4-6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值