共计 1872 个字符,预计需要花费 5 分钟才能阅读完成。
时光穿梭机
企业中在多人的项目开发环境下,使用 Git 版本控制工具对项目版本进行管理时,通常会对项目不同版本的文件进行查看,项目历史版本,未来版本的切换操作,对于一个项目开发人员,此时对于 Git 的这些基本命令操作就成为了一项基本技能。
修改文件与文件提交
修改后内容如下:
此时当文件修改后 使用 git status
命令可以看到 git 检测到文件被修改,git 版本库给出的下一步操作是添加修改的文件到暂存区 此时执行添加操作命令
执行提交
git log
命令查看操作日志记录
修改需要注意的问题
下面再次修改 git01.txt 然后执行提交操作
此时 执行 git diff HEAD -- git01.txt
与版本库内容进行比较结果如下:
差异比较说明
`---`:表示变动前的文件
`+++`:表示变动后的文件
变动的位置用两个 @作为起首和结束
@@ -1,2 +1,3 @@: 减号表示第一个文件,"1" 表示第 1 行,"2" 表示连续 2 行。同样的,"+1,3" 表示变动后,成为第二个文件从第 1 行开始的连续 3 行。
可以看出: 文本中第三行内容并没有提交到版本库中 原因在于修改后的 git01.txt 并没有添加到暂存区,所有执行提交操作并不会发生改变。
暂存区文件提交与撤销
当发现因失误而将文件添加到暂存区时,git 支持文件的撤销操作 执行命令 git reset HEAD 文件
操作如下:
再次查看版本库状态 test.txt 成为未追踪文件
版本回退
当文件修改后被提交的次数很多时,对于版本库中存放的文件就会出现不同的版本,在多人开发的项目环境中,通常会对不同版本文件进行查看甚至回退的情况(比如某些游戏中所提供的状态保存功能,能够在某一时刻保存整个游戏场景状态以方便后续继续在该状态下进行游戏进行而不是从头开始), 值得庆幸的是 Git 也提供了同样的功能,能够让开发者在不同版本的项目中进行切换,达到时空穿梭自如的目的!
对于上面操作的 git01.txt 文件已有几个版本,对于历史版本的查看 使用git log
命令:
git log:命令用于显示提交日志信息
列表显示的结果按提交时间倒叙排序,其中第一条中 HEAD -> master
代表当前指针指向 Git 版本库中 master 主干分支,每次提交 Git 内部均会生成一个唯一的 SHA 算法构建的字符串来唯一标识当前版本
此时如果想要执行版本版本回退操作使用命令 git reset
git reset 命令用于将当前 HEAD 复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit 等)。
回滚前在执行两次提交操作 方便文件不同版本间的切换
第三次提交 修改后的 git01.txt 内容如下:
第四次提交 修改后的 git01.txt 内容如下:
git log
查看提交历史记录如下
当然,如果提交历史记录较多 可以加入数字控制显示的版本记录数 并且使用 --pretty=oneline
简化输出 如下:
显示最近三次提交
切换版本前 git01.txt 内容如下:
回退到上一版本
执行 git reset –hard HEAD^
-
HEAD^: 将指针指向上一个版本,如果是上上一个就是 HEAD^^, 上上上一个 HEAD^^^, 但这样记就比较麻烦,如果回退版本较多,简写为 HEAD~100 往前回退 100 个版本 ~ 后跟数字即可
查看回退后的 git01.txt 内容如下:
回退操作已经完成,但此时如果想要回到未来的版本即最新的版本怎么办呢? 其实这里也比较简单,前面说到针对提交后的版本库,每个版本均会有一个唯一标识,这里找到对应版本标识即可完成回到未来版本的操作 如下
执行 git reset 命令如下:
如果此时回到某一个版本后直接关闭了当前 git 命令窗口 怎么样才能回到未来版本呢? 因为此时未来版本的唯一标识 id 在窗口中看不到了!
值得庆幸的是,Git 早已为你想到了这种情况,Git 提供了一个命令 git reflog
用来记录用户操作的每一次命令,效果如下:
git reflog:查看记录在本地的 HEAD 和分支引用在过去指向的位置。
文件删除
在 Git 中,删除文件同样是一个修改操作,即在 Git 世界中,Git 仅仅关注文件是否被修改(文件添加,更新,删除)
在工作区添加新文件 git02.txt 内容如下:
将文件添加到版本库
文件提交到版本库后,在工作目录执行手动删除操作后执行git status
命令可以看到 Git 能够追踪到文件被删除情况,注意此时版本库中文件并没有被删除,只是工作目录中文件被删除!
如果此时发现文件是被误删除呢,不用担心,这里可以将误删除的文件重新从版本库中检出,执行命令:
git checkout -- 文件名
如果确定是要执行删除操作 执行 git rm 命令即可
字这种字