Git基础教程2 -【查缺补漏】

2022/04/11

当我重读廖哥的Git教程时发现之前没注意到的一些命令技巧,本文是作为Git基础教程1的补充,若想要了解Git的核心思想和方法,还请阅读之前的文章。

Fast Forward 模式

当master分支在创建dev分支之后并未产生任何新的commit,此时的合并就叫Fast Forward

但在Fast Forward模式下,删除分支后,会丢掉分支信息

  • 如果想要保留分支信息,就需要强制禁用Fast Forward,此时Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

下图为Fast Forwardno Fast Forward的对比图,非常直观:

想要强制禁用Fast Forward模式非常简单,只需要在merge命令后添加--no-ff,并且附上commit的名称:

$ git merge --no-ff -m "merge with no-ff" dev

实战一下, 使用git log --graph看看提交后的效果:

Q8En5j

果然,无论是在终端还是在开发工具中,都可以看到强制禁用Fast Forward模式后,Git确实保留了分支的信息


switch

使用git checkout [分支]可以切换分支,但git checkout --[file]又可以撤销暂存区内文件的修改。一个命令,两个完全不同的用途,用起来多少有些不舒服吧。

所有Git贴心的为我们添加了一个命令:git switch

# 创建并切换到分支
$ git switch -c [分支名]

# 切换分支
$ git switch [分支名]

保存未提交的分支

想象一个场景,当你正在忙碌软件的开发,并且当前的开发还没有达到可以commit的标准,此时老板突然让你新建一个分支issue-001去修复一个bug,这时候怎么办?怎么把当前分支没有提交的内容保存

Git为我们提供了一个git stash命令来储存未提交的工作区:

# 保存当前工作区的修改
$ git stash

# 查看当前stash中的内容
$ git stash list

# 将当前stash中的内容弹出,并应用到当前分支对应的工作目录上
$ git stash pop

保存后查看git status应当是一个干净的工作区。当处理完bug后,回到没有提交的分支上,只需执行git stash pop即可恢复之前的修改。


标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

# 查看已存在标签
$ git tag

# 打一个新标签 (默认标签是打在最新提交的commit上的)
$ git tag <name>

# 在之前的commit上打标签
$ git tag <name> <commit_id>

# 查看标签信息
$ git show <name>

# 删除标签
$ git tag -d <name>