# 杂项

提交训练!

# 提交的技巧#1

你之前在 newImage 分支上进行了一次提交,然后又基于它创建了 caption 分支,然后又提交了一次。

此时你想对某个以前的提交记录进行一些小小的调整。比如设计师想修改一下 newImage 中图片的分辨率,尽管那个提交记录并不是最新的了。

解决办法:

  • 1.先用git rebase -i将提交重新排序,然后把我们想要修改的提交记录挪到最前
  • 2.然后用git commit --amend来进行一些小修改
  • 3.接着再用git rebase -i来将它们调回原来的顺序
  • 4.最后我们把main移到修改的最前端,就大功告成了
git rebase -i
git commit --amend
git rebase -i
git branch -f main caption

# 提交的技巧#2

正如你在上一关所见到的,我们可以使用 rebase -i 对提交记录进行重新排序。只要把我们想要的提交记录挪到最前端,我们就可以很轻松的用 --amend 修改它,然后把它们重新排成我们想要的顺序。

但这样做就唯一的问题就是要进行两次排序,而这有可能造成由 rebase 而导致的冲突。下面还是看看 git cherry-pick 是怎么做的吧。


#1同样的要求,不用rebase试试

git checkout main
git cherry-pick C2
git branch -f main C1
git cherry-pick C2 C3

# Git Tags

相信通过前面课程的学习你已经发现了:分支很容易被人为移动,并且当有新的提交时,它也会移动。分支很容易被改变,大部分分支还只是临时的,并且还一直在变。

你可能会问了:有没有什么可以永远指向某个提交记录的标识呢,比如软件发布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性,有没有比分支更好的可以永远指向这些提交的方法呢?

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


建立两个标签,然后切换到v1,要注意你会进到分离HEAD的状态

git tag v0 C1
git tag v1 C2
git checkout C2

# Get Describe

由于标签在代码库中起着“锚点”的作用,Git 还为此专门设计了一个命令用来描述离你最近的锚点(也就是标签),它就是 git describe

git describe main
# 输出v1_2_gC2
# 最近的标签是v1,相隔2次提交,自身是C2
lastUpdate: 4/2/2023, 8:18:35 PM