Git ~ 管理修改 ~ Gitasd

时间:2023-03-08 15:46:30
Git ~ 管理修改 ~ Gitasd

现在假设你一经常我了暂存区的概念 , 下面我们将要讨论的就是 , 为什么 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" 推送到了远程版本库 ....那就  ...