美文网首页手把手教你学git成长励志程序员
有关Git的那些事儿(六)—修改

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

作者: 栗子西西 | 来源:发表于2019-01-08 22:10 被阅读134次

    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,它会告诉你接下来可能出现的情况以及对应的指令。

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

    相关文章

      网友评论

        本文标题:有关Git的那些事儿(六)—修改

        本文链接:https://www.haomeiwen.com/subject/nnlirqtx.html