剖析 git之进阶篇

这篇文章是继基础篇之后写的,没看的请先看基础篇,直接上代码剖析 git之进阶篇

1、再一次创建Git项目
首先,我们按照这样的格式新建一个文件目录:
剖析 git之进阶篇

由于我们本地的SSH已经创建,Git的用户名也已经配置好。我们现在不需要再去配置用户名和SSH了。现在我们首先保证上面的一个项目基本目录结构完整,并且已经在根目录创建好了.gitignoreREADME.md文件。

我现在在.gitignore文件内忽略了webstom编辑器创建的管理文件.idea,而README.md文件只是简单创建了一个标题。现在我们回顾一下本地创建一个Git仓库,再推送到远程仓库的全过程。
  1. 初始化Git仓库:git init
  2. 添加所有文件到本地Git仓库(如有需要忽略的提前在.gitignore文件里配置好):git add .
  3. 提交:git commit -m '一个新的项目结构'
  4. 打开自己的https://github.com/,创建一个新的远程仓库,仓库名和项目文件夹可以同名“app_test”,其它默认(Public,不创建README文件)
  5. 通过命令创建远程Git仓库:git remote add origin [email protected]:yourname/app_test.git
  6. 通过命令保持本地Git仓库和远程Git仓库的连接关系:git push -u origin master
  7. 刷新GitHub页面,查看指定本地文件是否已经全部上传
2、项目修改
现在,我们当前项目目录已经处于Git仓库的管理下,我们在
<main>标签内添加一个<div>标签并将img文件夹内的四张图片添加进来:
剖析 git之进阶篇
由于Webstom这个编辑器有自带Git管理工具,所以图示部分表示代码出现了修改,在资源文件管理器里index.html也产生了颜色变化(蓝色):
现在,我们再将样式表style.css里的内容随意更改一下,这个时候,style.css文件的颜色也发生了变化。我们输入命令git status查看Git仓库现在的状态(如果比较熟练之后可以使用git status -s命令,结果会是简化版的。如果该输入命令没有任何内容输出,那表示当前仓库没有任何需要提交的文件):
剖析 git之进阶篇
这段内容的大致意思就是当前的“origin/master”分支作出了修改,但并未提交,需要使用git add <file>...命令来提交你的更改,或者使用命令git checkout --<file>...来放弃你此次的修改。
按顺序输入以下命令:
git add .
git commit -m '修改了index.html和style.css文件'
git push origin master
在窗口内信息输出结果过程如下:剖析 git之进阶篇
通常,只要看到图示中最后一行“master -> master”,又没有看到任何“Error”字样,表示这次提交到远程仓库的操作已经成功,我们可以切换到GitHub上刷新看看,有的时候刷新页面没有看到文件内容变化,但整个提交过程又没有提示任何错误,这是由于GitHub服务器缓存或者延迟的原因,您可以稍候10秒左右,在浏览器端按“Ctrl+F5”或者“Shift+F5”(不同浏览器快捷键不同,Chrome是后者)强制刷新几次重试。
回到远程项目仓库主页,点击图示按钮可以查看提交的历史记录:
剖析 git之进阶篇
纪录打开后如下:
剖析 git之进阶篇
其中“提交的版本号”部分可以供我们在项目出现重大问题后,回归到指定的“稳定版本”,在教程后续会进行讲解。
3、撤销修改
撤销修改主要是面对四种情况:
第一种是已经git add,但是不小心彻底删除了某个文件(回收站里也找不到的那种删除方式,在Windows操作系统上是shift+delete的组合键),需要恢复删除的文件。
第二种是已经git add了,但是又没有git commit,希望撤销修改;
第三种就是已经git commit了的;
第四种就是已经git push origin master了的。

(1)我们先来说第一种。
假设现在你正在一个目录中开发一个刚起步的项目,忙活了一天,自己不小心按下了强制删除的快捷键,或者是哪个和你关系不太好的同事删除掉了你的项目,这个时候如果你没有初始化(git init)过一个git仓库,并且git add过,那对不起,从头再来吧。但如果你已经有了一个git仓库,并且使用过git add命令(不管是否git commit过),并且这个仓库的配置文件处于隐藏状态没有被删掉(.git文件默认是一个隐藏文件),那你可以使用以下命令来进行文件的恢复:
git checkout -- 你的文件名
举一个简单的示例:
先用git init来初始化了一个git仓库,假设.git这个文件是不可见的:
剖析 git之进阶篇
然后我使用git add .的命令来添加项目到了仓库,
剖析 git之进阶篇
现在下班了,难得去写提交注释了,明天来弄。关电脑,走人!
第二天来看目录长这样:
剖析 git之进阶篇
这个时候找凶手都是次要的了,先得看看git仓库还在不在,点击资源管理器“查看”菜单,然后点开如图选项:
剖析 git之进阶篇
谢天谢地,仓库还在。
剖析 git之进阶篇
这个时候打开git的命令行终端,输入命令git status查看操作...果然,这文件被人为删除了:
剖析 git之进阶篇
这个时候能够使用的命令就只有这一条了:
剖析 git之进阶篇
切换到文件目录,惊喜的发现,文件已经回来了。
这个时候你需要做的唯一一件事就是,继续保持.git文件的隐藏状态,应付下一次文件被删的情况。
注意上面的这行git checkout -- README.md index.html--后是两个文件名,中间用空格符分割,这和使用git add时一次性添加多个(不是全部)时的使用方式是一样的。

4、检查代码的内容更改
有的时候发现当前代码的功能失效了,而在上一个版本中明明还是正常的,这个时候回退版本可能不是最好的选择,而是比较两个版本代码内容的更改,从代码的更改过程中找出问题的所在。我们有两个方法来检车代码内容的修改。

首先,要做这个实践的话得先修改代码中的内容,为了简便起见,我们就拿index.html文件来做修改好了。

这是我们当前HTML文件的代码:
剖析 git之进阶篇
现在我们给HTML的<header>标签添加一个<i id="logo"><nav>标签:
剖析 git之进阶篇
在图示中我们的代码编辑器也标注了修改了内容的地方,也就是10~13行的行标旁边的浅蓝色。然后我们将修改后的HMLT文件按照我们之前讲的流程推送到GitHub上(过程略,可以参看本章教程之前的内容),最后输出的信息应该是这样的:
剖析 git之进阶篇
接着输入以下命令查看简化版的日志信息:
git log --pretty=oneline
剖析 git之进阶篇剖析 git之进阶篇
现在,我们只需要输入git show <版本号>就能在命令行工具输出的内容中查看这次提交的内容的代码更改了:
剖析 git之进阶篇
返回的信息包含了“提交版本号”、“提交者”、“提交日期”、“注释”等内容,并在下方用不同颜色的“+”和“-”表明了这次代码内容的修改情况。
5、前往“未来”的版本
在实际开发中还会有这样一种,情况就是我们开发到一定阶段,发现做了一些无用功,需要回退到上一个版本,于是我们就这样做了,然后关电脑下班走人。晚上睡觉的时候发现这不对劲,明天怎么向项目经理解释我今天下午的确是做了东西的而不是在那里打酱油呢?于是想在第二天上班的时候再次前进到之前的最新版本。

现在举一个简单的实例,目前我的最新版本做的事是“完善了自述文件描述”,如图:
剖析 git之进阶篇
但是我回到了上一个版本:
剖析 git之进阶篇剖析 git之进阶篇
可以从最新的日志里发现,“完善了自述文件描述”的历史记录已经不在了,我们没有办法使用git reset的命名跳到那个版本去了...怎么办?!

这个时候不要急,git有一个命令会记录你的每一次操作:
那就是:
git reflog
这个命令记录了你的每一次操作,并且带有版本号,这样一来我们就可以使用git reset 版本号命令去进行版本跳转了。
剖析 git之进阶篇
通过使用git reset 版本号命令后,再次查看日志,发现已经回到了当前的最新版本了。