当我重读廖哥的Git教程时发现之前没注意到的一些命令
和技巧
,本文是作为Git基础教程1的补充,若想要了解Git的核心思想和方法,还请阅读之前的文章。
Fast Forward 模式
当master分支在创建dev分支之后并未产生任何新的commit,此时的合并就叫
Fast Forward
。但在
Fast Forward
模式下,删除分支后,会丢掉分支信息。
- 如果想要保留分支信息,就需要强制禁用
Fast Forward
,此时Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下图为Fast Forward
和no Fast Forward
的对比图,非常直观:
想要强制禁用Fast Forward
模式非常简单,只需要在merge
命令后添加--no-ff
,并且附上commit
的名称:
$ git merge --no-ff -m "merge with no-ff" dev
实战一下, 使用git log --graph
看看提交后的效果:
果然,无论是在终端还是在开发工具中,都可以看到强制禁用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>