Git使用 从入门到入土 收藏吃灰系列 (十三) git stash、git check-pick、git tag、git diff

196 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本节速览

  • git stash 堆栈
  • git tag 标签
  • git cherry-pick 挑选合并
  • git diff比较信息差异

本节开始都是一些不怎么用的命令,或者一些使用技巧,了解即可

一、前言

讲讲小张的感受:我没有接触过Git,所以看了很多视频,对于入门使用确实只要知道git clone,git add,git commit,git push,git merge ,确实也就足够了。但是我很好奇背后的原理,为什么要用git add到暂存区而不是直接git commit?很多指令之间为什么要按一定的顺序执行?所以这个系列我以初学的时候,小白的角度从安装到工作原理(有的是我自己的见解,如果感觉不对,欢迎指正),再到实际应用!另外,推荐看一遍第三个参考视频,然后看一下第四个参考视频,对工作原理的讲解和实际应用确实不错!

二、git stash 存储到堆栈

这个命令是用来处理bug的,初学可以新建一个分支,在新分支中解决完bug再和主分支合并。但是这一操作可以使用git stash来完成

git stash 命令的用法

git stash的详细讲解_andyzhaojianhui的专栏-CSDN博客_git stash

三、Git tag 标签

image-20220122163422944

在Github下载别人做好的软件都有这个界面。tag是git版本库的一个标记,指向某个commit的指针。主要用于发布版本的管理,一个版本发布之后,我们可以为git打上v 1.0,v 1.1这样的标签。tag需要==单独推送远程==,不能使用git push

git push origin <tagName>

在这里插入图片描述

tag感觉跟branch有点相似,但是本质上和分工上是不同的:

tag 对应某次commit, 是一个点,是不可移动的 branch 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的 所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag

tagbranch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支

image-20220122163112998

# 标出标签
git checkout -b <branchName> <tagName>
# 或者先切换标签再新建分支
git checkout <tagName>
git switch -c <branchName>

git tag常用指令

# 创建本地tag
git tag <tagName>
git tag -a <tagname> -m "XXX..."  # 指定标签信息

# 推送到远程仓库
git push origin <tagName>

# 本地有多条tag,一次推送全部
git push origin --tags

# 切换标签 切换后,分支置空
git checkout <tagName>

# 查看本地某个 tag 的详细信息
git show <tagName>

# 查看本地所有 tag
git tag
git tag -l

# 查看远程所有 tag
git ls-remote --tags origin

# 本地 tag 的删除
git tag -d <tagName>

# 远程 tag 的删除
git push origin --delete tag <tagName>

Git中tag标签的使用_等待化茧成蝶的专栏-CSDN博客

四、git cherry-pick 挑选合并

这部分在网上找了这篇,感觉解释相当好,我就不写啦。FightFightFight的博客

git cherry-pick <哈希值>

五、git diff

git diff常用命令

# 当工作区有改动,暂存区为空,diff的对比是"工作区与最后一次commit提交的仓库的所有文件";
# 当工作区有改动,暂存区不为空,diff对比的是"工作区与暂存区的所有文件"。
git diff
git diff <filename>	# 指定文件

# 显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改
git diff --cached
git diff --staged

# 比较暂存区和工作区最后一次提交的差别
git diff HEAD
git diff HEAD <filename>	  # 指定文件
git diff <哈希值> <filename>	# 指定某一次提交

# 查看最近一次提交的版本与往过去时间线前数X个的版本之间的所有同git diff HEAD中定义文件之间的增删改
git diff HEAD~X
git diff HEAD^^^…(后面有X个^符号,X为正整数)

# 比较两个分支上最后 commit 的内容的差别
git diff <branch-Name1> <branch-Name2> 
git diff <origin/branch-Name1> <branch-Name2> #比较远程分支与本地分支
git diff <branch-Name1> <branch-Name2> --stat	# 显示简略内容

下节介绍

  • 如何清除git仓库的所有提交记录,变为一个新仓库