现在假设你一经常我了暂存区的概念 , 下面我们将要讨论的就是 , 为什么 Git 比其他的版本控制系统设计的优秀 , 因为 Git 跟踪管理的是修改而非文件
什么是修改 ? 修改就是 你在某个地方 新增了一行 , 删除了一行 , 或者修改了 某一行的内容 . 包括创建一个新的文件也是修改 . 下面我们试验一下证明 跟踪管理的是内容 .
现在我们讲 readme.txt 新增加一行 , " 我是新增加的一行 "
xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
然后将该文件添加到暂存区
xpower@xpower-CW65S:~/learngit$ git add readme.txt
现在可以看到暂存区内保存了一个 已经变化的文件 .
xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存) 修改: readme.txt
现在再次修改文件 . "我是第二次修改"
然后直接添加到 分支
xpower@xpower-CW65S:~/learngit$ git commit -m "what happend ?"
[master 515237e] what happend ?
file changed, insertion(+), deletion(-)
xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
从上面的代码可以看出 尴尬的事情发生了 , 第二次修改的内容没有被添加进去 .
现在 讲第二次修改添加到暂存区
xpower@xpower-CW65S:~/learngit$ git add readme.txt
然后讲文件添加到 分支 .
xpower@xpower-CW65S:~/learngit$ git commit -m"you say"
[master 18b2596] you say
file changed, insertion(+)
..-----------------------------------------------------------------------------------------
上面的添加是一种比较麻烦的事情 . 下面介绍一个简单的. 当你修改完文件之后 git status 会出现
xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
看到最后一行 , 有两种添加方法 , 第一种 " git commit . " 是将工作区内的所有 " 新的 " 文件 都保存到暂存区 . 或者直接 " git commit -a " 用VIM 输入更改备注之后 直接将 工作区 " 新的 " 文件储存到 分支里面 /
撤销修改.
若干年后的某一个凌晨两点你在赶一份工作报告 . 你在 readme.txt里面.写了一句 . " My stupid boss still prefers SVN " 在你准备提交之前 , 一杯咖啡起了作用 , 你猛然发现 stupid boss 可能会让你丢掉这个月的奖金 !
xpower@xpower-CW65S:~/learngit$ cat readme.txt
git is version control systen.
git is free software
我是第一次修改 我是第二次修改
My stupid boss still prefers SVN
既然错误发现的很及时 , 就可以很容易的纠正他 , 你可以手动讲文件恢复到你想要的样子 , 然后用git status 查看一下 .
xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
贴心的git 会告诉你 接下来你能执行的操作 . git checkout -- readme.txt 丢弃掉工作去的改动 .
xpower@xpower-CW65S:~/learngit$ git checkout -- readme.txt
xpower@xpower-CW65S:~/learngit$ cat readme.txt
git is version control systen.
git is free software
我是第一次修改 我是第二次修改
命令 git checkout -- readme.txt 的意思就是 将文件 readme.txt文件在工作区的修改全部撤销 .
这里有两种情况 :
一种是 readme.txt还没有放到 暂存区 . 现在撤销修改 就回到和版本库 一模一样的状态 .
一种是 readme.txt已经存放到暂存区 , 现在又做了修改 , 现在撤销修改 旧回到和版本库一模一样的状态 .
现在 假设你不但该错了东西 , 而且还从暂存区 提交到了版本库 , 怎么办呢 ? 还是记得版本回退么? 我们可以讲版本回退 , 不过这也是有条件的就是 , 你还没有把本地版本的库推送到远程 , 因为Git的是分布式版本控制系统 . 我们后面会讲到 远程版本库 , 一旦你将 "stupid boss" 推送到了远程版本库 ....那就 ...