本文已参与「新人创作礼」活动,一起开启掘金创作之路。
本节速览
git stash堆栈git tag标签git cherry-pick挑选合并git diff比较信息差异本节开始都是一些不怎么用的命令,或者一些使用技巧,了解即可
一、前言
- 参考安装Git 详细安装教程
- 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多
- 参考视频『Git』知道这些就够了_哔哩哔哩_bilibili,这个精华多,推荐看这个
- 参考视频7小时学会Git 基础全套完整教程(从入门到精通)_哔哩哔哩_bilibili,这个虽然长,但是他偏实践,对小白友好,特别有意思
- 附一个Git动画学习网站
- Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
讲讲小张的感受:我没有接触过Git,所以看了很多视频,对于入门使用确实只要知道git clone,git add,git commit,git push,git merge ,确实也就足够了。但是我很好奇背后的原理,为什么要用git add到暂存区而不是直接git commit?很多指令之间为什么要按一定的顺序执行?所以这个系列我以初学的时候,小白的角度从安装到工作原理(有的是我自己的见解,如果感觉不对,欢迎指正),再到实际应用!另外,推荐看一遍第三个参考视频,然后看一下第四个参考视频,对工作原理的讲解和实际应用确实不错!
二、git stash 存储到堆栈
这个命令是用来处理bug的,初学可以新建一个分支,在新分支中解决完bug再和主分支合并。但是这一操作可以使用git stash来完成
git stash的详细讲解_andyzhaojianhui的专栏-CSDN博客_git stash
三、Git tag 标签
在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
tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支
# 标出标签
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 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仓库的所有提交记录,变为一个新仓库