有关Git的那些事儿(六)—修改

Git管理的是修改,而非文件本身。增加、删除、甚至是创建新文件都是修改。

Git既可以管理修改,也可以撤销修改。

下面我们分别看看这两部分内容。

管理修改

这个时候,可能有人不明白,到底什么是管理修改呢?我们来举个小栗子看看哈。

对之前的love.txt文件进行如下修改:

I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
Today is Tuesday.

之后添加文件到版本库,并且查看此时的状态。

git add love.txt
git status

命令行回复如下:

On branch master
Changes to be committed:
  (use “git reset HEAD <file>…” to unstage)

    modified:   love.txt

再修改love.txt如下:

I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
I know today is Tuesday.

现在,提交文件到版本库:

git commit -m “Tuesday”

命令行回复如下:

[master 7238888] “Tuesday”
 1 file changed, 2 insertions(+), 1 deletion(-)

现在,再次查看状态:

git status

命令行回复如下:

On branch master
Changes not staged for commit:
  (use “git add <file>…” to update what will be committed)
  (use “git checkout — <file>…” to discard changes in working directory)

    modified:   love.txt

no changes added to commit (use “git add” and/or “git commit -a”)

很明显,第二次的修改没有被提交。因为我们在第二次修改后没有使用add命令,修改并没有进入缓存区,所以提交的时候没有第二次修改的内容。

现在,我们用git diff HEAD — love.txt命令查看一下版本库中最新版本和工作区的区别:

git diff HEAD -- love.txt

命令行回复如下:

*diff —git a/love.txt b/love.txt*
*index e88da71..8347d74 100644*
*— a/love.txt*
*+++ b/love.txt*
@@ -2,4 +2,4 @@ I love you so much as the mouse like rice.
 Do you know?
 Every day
 Hey,Julie.
-Today is Tuesday.
\ No newline at end of file
+I know today is Tuesday.
\ No newline at end of file

版本库中最新版本和工作区中存放的版本的区别一目了然,第二次修改没有被提交。

撤销修改

有修改,就有可能犯错。这一辈子谁还没有犯糊涂的时候呢?知错能改善莫大焉。咱来看看如何改这错误。

假如,你在love.txt中无意添加了一句不太好的言语:

I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
I know today is Tuesday.
I hate Lilei.

过了一会儿,你突然觉得这样不妥。怎么办?咱先git status看看具体情况再说。

git status

此时,命令行回复如下信息:

On branch master
Changes not staged for commit:
  (use “git add <file>…” to update what will be committed)
  (use “git checkout — <file>…” to discard changes in working directory)

    modified:   love.txt

no changes added to commit (use “git add” and/or “git commit -a”)

其实,答案已经出现啦。Git告诉我们,使用git checkout - <file>可以丢弃工作区的修改内容。

我们来试试:

git checkout --love.txt

此时查看文件内容:

cat love.txt

命令行输出如下:

I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
Today is Tuesday.

我们又回到了最初遇见的地方~

这个时候有人可能有这样的疑问:如果我不仅修改了内容,还提交到了缓存区,想撤销,怎么破?

所谓车到山前必有路,咱们试试看呗~

现在,我们添加了一行不妥的话,并且git add到了缓存区。此时,使用cat <file>命令查看一下文本中的内容:

cat love.txt

命令行显示如下:

I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
Today is Tuesday.
Lilei is a pig.

不幸中的万幸是,在commit之前发现了错误,我们再发git status,问问Git有什么灵丹妙药。

git status

Git告诉我们如下:

On branch master
Changes to be committed:
  (use “git reset HEAD <file>…” to unstage)

    modified:   love.txt

Git很清楚地告诉我们,用git reset HEAD <file>命令可以撤销掉添加到缓存区的修改。

git reset HEAD love.txt

此时,命令行输出:

Unstaged changes after reset:
M   love.txt

此时,查看git status,命令行输出如下:

On branch master
Changes not staged for commit:
  (use “git add <file>…” to update what will be committed)
  (use “git checkout — <file>…” to discard changes in working directory)

    modified:   love.txt

no changes added to commit (use “git add” and/or “git commit -a”)

发现了吗?如果你此时不知道需要什么指令的时候,不妨试一试git status指令,Git会告诉你接下来有可能出现什么情况,并且告诉你应该怎么应对。

如果此时,你不仅添加到缓存区,并且提交到版本库,怎么破?请参照第四小节内容(穿越历史)。温故而知新,可以为师矣。

本小节内容总结:

  1. 修改如果不适用git add命令进行添加到缓存区(stage),就不会被提交到版本库中。
  2. git diff HEAD -- <fileName>指令,可以查看当前版本库中的版本和工作区中的版本有何不同?
  3. 若修改了工作区内容,还未添加到缓存区,想撤销,使用命令git checkout --<file>
  4. 若修改了工作区内容,并且已添加到缓存区,但是未提交,想撤销,可以使用命令git reset HEAD <file>
  5. 如果已经将修改提交到了版本库中,想撤销,可以参照第四小节(穿越历史)内容。
  6. 友情提示:如果不知道该使用什么命令,可以使用git status,问问Git,它会告诉你接下来可能出现的情况以及对应的指令。

好啦。今天就到这里啦。下节再见哈~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,668评论 4 54
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,899评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,929评论 0 11
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,537评论 0 13
  • 水果是一个很好的东西,多吃的话会对我们的身体有很多的好吃,比如可以补充我们体内所缺的水份,可以促进我们身体新陈代谢...
    习惯与瘦身阅读 198评论 0 0