【新版本】
我们创建一个新的文件夹git-version,在文件夹下初始化一个git仓库git init
,touch 1.txt
// 第一个版本,内容为空
git add 1.txt
git commit 'add 1.txt'
// 第二个版本
vim 1.txt // 添加1
git add 1.txt
git commit 'alter to 1'
// 第三个版本
vim 1.txt // 修改1为2
git add 1.txt
git commit 'alter to 2'
【查看版本】
开发中,我们往往会对文件进行多次的修改、然后提交,每一次提交都会产生一个新的版本,如:
版本1: ''
版本2: '1'
版本3: '2'
在实际工作中,我们处理的文件比较复杂,并不能记得每次都改了什么内容,在Git中,我们用git log命令查看提交历史,git log命令显示从最近到最远的提交日志。
git log有许多选项,下表列出了一些常用的选项及其释义:
选项 说明
-p 按补丁格式显示每个更新之间的差异
--word-diff 按 word diff 格式显示差异
--stat 显示每次更新的文件修改统计信息
--shortstat 只显示 --stat 中最后的行数修改添加移除统计
--name-only 仅在提交信息后显示已修改的文件清单
--name-status 显示新增、修改、删除的文件清单
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)
--graph 显示 ASCII 图形表示的分支合并历史
--pretty 使用其他格式显示历史提交信息可用的选项包括oneline,short,full,fuller 和format(后跟指定格式)
--oneline `--pretty=oneline --abbrev-commit` 的简化用法
常用-p选项展开显示每次提交的内容差异。可以看到,最近一次更新和上一次更新的区别是将1修改为2。上一次和上上一次更新的区别是从空内容变成内容为1。
【版本切换】
现在,我们准备把1.txt回退到上一个版本,也就是内容为'1'的那个版本。
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新提交的版本,上一个版本就是HEAD^, 上上一个版本就是HEAD^^ ,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。、
现在,我们要把当前版本“alter to 2”回退到上一个版本“alter to 1”,就可以使用git reset命令,git reset --hard HEAD^
,将文件返回到上一个版本,用cat 1.txt
,内容为1,说明版本回退成功。
我们用git log再看看现在版本库的状态,发现最新的那个版本“alter to 2”已经看不到了。
如果想返回到最新的版本,可以使用命令git reset --hard commit_id来实现。
但是,如果找到最新版本的1.txt的commit id呢?Git提供了一个命令git reflog,该命令按照之前经过的所有的commit路径按序来排列,用来记录你的每一次命令。
下面使用git reset命令,将文件恢复到最新版本。
git reset --hard 7ee5c95
现在cat 1.txt
,内容是2,成功将版本回退到最新版本。
总结
Git允许我们使用命令git reset --hard commit_id
在版本的历史之间切换。
HEAD可以用来替换commit_id,HEAD指向的版本是当前版本,上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ ,往上100个版本写成HEAD~100。
当然了,^和~这两个特殊符号,除了用在HEAD上外,还可以用在<branchName>上或Commit ID上。如master^,代表master的上一个版本;1f2f476~1代表Commit ID为1f2f476的上一个版本。
可以用git log可以查看提交历史,或者用git reflog查看命令历史,以便确定要切换的版本的版本号。
作者:小小的开发人员
链接:https://www.jianshu.com/p/cf3102d44ad3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。