• Git 学习笔记<本地版本库的管理> (二)


    今天来记录一下关于版本库的创建与管理的笔记。

    版本库是什么?

    版本库可以理解为一个仓库(一个可以被git管理的目录),里面文件的修改删除都可以被追踪,并且每个版本都会保存以便还原(仅仅保存修改或删除的文件),于是可以认为保存了各种不同的版本,所以叫版本库。

    如何管理?

    Git给你提供各种不同的指令来管理版本库。

    1.创建:

    选择一个地方创建一个新文件夹,然后进入这个文件夹(windows中不要出现中文路径)

    $mkdir LEARNER   //当前目录下新建文件夹

    $cd LEARNER //进入此文件夹

    如果你不知道当前目录在哪 可以输入 $pwd 便会显示完整路径

    接下来 $git init 这时这个文件夹就可以被git管理了,当然设置一个已有文件的目录也是可以的.

    2.添加文件到版本库:

    如第一章所说,本地端存在工作区,版本库.

    你手动在文件夹创建的所有文件其实是存在于工作区,你还必须上传到版本库的暂存区,然后在提交给正式的版本库.暂存区的存在便于你一次提交多个文件,这样版本库的代码保持完整性随时可以运行.

    还有一个问题就是, git只能追踪诸如TXT文件、网页、代码的变动(包括第几行的变化),图片、视频等虽然可以管理但不知道哪里变化。而且,word文档也是无法追踪变化的

    建议使用UTF-8编码来保存文件。此时不要用windows的记事本来编辑文本,因为记事本保存UTF-8时会在开头加一个 0xefbbbf(十六进制)的字符。可能会有一些意想不到的错误。应该下载别的文本编辑器,比如 PSPad

    接下来来添加文件。

    创建一个hello.txt文件

    /*Hello, I'm Hanson Green.*/
    /*Wish You Can Learn Something From Here.*/

    保存于git管理的目录下(子目录也可以)。

    ① 在Git Bash 中输入$git add hello.txt (没有显示即成功),此时文件存于暂存区。

    ② 继续输入$git commit -m "add hello.txt"  这时文件便提交给仓库。 后面的 -m "content" 是用来保存本次提交有关备注的。一定要填,这对工作是必要的。 

    1 file changed, 2 insertions(+) 告诉你 改变了一个文件,增加了两行。

    这样便提交了文件。你可以一次add多个文件一次性提交。

    3.查看工作区的状态

    接下来对hello.txt进行更改

    /*Hello, I'm Hanson Chan.*/
    /*Wish You Can Learn Something From Here.*/

    然后再输入  $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:   hello.txt
      
    no changes added to commit (use "git add" and/or "git commit -a")

    它告诉你 有改变没有被提交。有提示两种解决办法:使用 git add <file> 来添加将被提交的文件;使用 git checkout --<file> 来丢弃改变(此方法下面提到)。

    然后提示被修改的文件是 hello.txt。 是不是很人性化?那接下来想查看修改的地方怎么办呢。

    输入 $git diff

    复制代码
    $ git diff
    diff --git a/hello.txt b/hello.txt
    index faa367f..761d254 100644
    --- a/hello.txt
    +++ b/hello.txt
    @@ -1,2 +1,2 @@
    -/*Hello, I'm Hanson Green.*/
    +/*Hello, I'm Hanson Chan.*/
     /*Wish You Can Learn Something From Here.*/
     No newline at end of file
    复制代码

    便可以查看到更改的地方。

    输入 $git add hello.txt

    然后再查看状态 $git status

    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   hello.txt

    On branch master 是在分支master,之后会说到。

    然后 $git commit -m "change my name"   成功提交

    之后输入$git status 就会提示工作区是干净的 没有需要提交的东西。

    4.版本回退与管理

    首先我们再在文件中添加一行 

    /*I Want To Change This File*/ 

    然后进行add 和 commit -m "some change" (一定要输入备注)

    我们如何知道前几次提交的记录呢?当然是有办法的。

    输入 $git log   (Git log后面可以加-3 , -3的意思是只显示两个commit,如果想显示5个,就-5。不指定的话,git log会从该commit一直往后显示。)

    复制代码
    
    

      $ git log


      commit b160e923d62a6568233d4278551893bd00c3e1c0
      Author: 大大大大大沐魇 <imyijie@vip.qq.com>
      Date: Wed Aug 6 11:37:08 2014 +0800

    
    

          some change

    
    commit f5842ba282aec415f1cebe5899ec413ce74fc681
    Author: 大大大大大沐魇 <imyijie@vip.qq.com>
    Date:   Wed Aug 6 11:11:47 2014 +0800
    
        change my name
    
    commit cf6f342e99cbe0650c6f6272583497a60326e47a
    Author: 大大大大大沐魇 <imyijie@vip.qq.com>
    Date:   Wed Aug 6 10:53:18 2014 +0800
    
        add hello.txt
    复制代码

    所有信息都记录在案。commit就是对应的版本号了。如果觉得太多,输入 $ git log --pretty=oneline 就只会显示commit 和 备注了。

    然后你发现这次更改有错误但已经提交到本地库了,想回退到上一个版本怎么办?

    方法①:

    输入 $git reset --hard HEAD^ 

    HEAD即为当前分支(也可以直接写分支名称,比如现在的master。这个概念以后讲。)

    后面的 ^ 表示上一个版本 。^^表示上两个,等同于 ~2  即  $git reset --hard HEAD~2


    那--hard 参数又是什么意思呢? 其实还有 --soft 和 --mixed 选项

           --mixed 这个是默认的选项。如git reset [--mixed] master^。它的作用仅是重置分支状态到master^, 但是却不改变任何工作文件的内容。即,从master^到master的所有文件变化都保留了,但是master^到master之间的所有commit日志都被清除了, 而且,发生变化的文件内容也没有通过git add标识,如果您要重新commit,还需要对变化的文件做一次git add。 这样,commit后,就得到了一份非常干净的提交记录。 (回退了暂存区和仓库中的内容) 
           --soft相当于做了git reset –mixed,后,又对变化的文件做了git add。如果用了该选项, 就可以直接commit了。(回退了仓库中的内容) 
           --hard这个命令就会导致所有信息的回退, 包括文件内容。 一般只有在重置废弃代码时,才用它。 执行后,文件内容也无法恢复回来了。(回退了工作目录、暂存区和仓库中的内容) 

     或者 知道了版本号的话 比如 change my name 那个commit_id 是 f5842ba282aec415f1cebe5899ec413ce74fc681

     执行 $git reset f5842ba2  可以直接回退到这个版本 , 不必输入完全 可以通过前几个字母找到这个commit即可。

    另外 上述引用中说--hard 无法恢复回来也是有个例外的。也就是当你还没有关闭命令行时,可以向上翻到那个版本号 执行 $git reset commit_id(你找到的版本号) 即可。

    而且...使用$git reflog 可以查到你所有的操作记录,也可以查到原来的commit _id

    方法②:

    输入 $ git revert commit_id


    这个也是可以回到原来的版本,但是这时候是形成一个新的记录,而不是往回退。

    -------------------------------

    这两个方法的区别就是:reset 是往回退,那个版本之后的记录会从仓库中消失(根据你选择的模式是否存在于工作区或者暂存区)。而 revert 相当于是一个新版本,不过与你指定的版本号的文件一样。

     ------------------------------

    5.撤销你在工作区或者暂存区的修改

    还记得3中的工作区里修改后查看状态吗?

    没错,就是使用 $git checkout -- file 即可 撤销工作区的修改到最后一次 git add 或者commit的时候。(file是文件名)

    还记得add修改文件之后查看状态吗?

    就是使用 $git reset HEAD file    然后暂存区的文件就会回退到工作区。再执行丢弃工作区修改的代码即可(就在上面两行)。

    6.删除文件

    使用$rm file  可以删除工作区的文件(如果你删错了可以用$git checkout -- file ),然后再输入 $git rm file 和$git commit -m "remove file" 就会从版本库中删除了。

  • 相关阅读:
    一轮项目冲刺——移山小分队(9)
    一轮项目冲刺——移山小分队(8)
    一轮冲刺项目——移山小分队(7)
    一轮项目冲刺——移山小分队(6)
    一轮项目冲刺——移山小分队(5)
    一轮项目冲刺——移山小分队(4)
    一轮项目冲刺——移山小分队(3)
    一轮项目冲刺——移山小分队(2)
    一轮项目冲刺——移山小分队(1)
    C# 记录循环消耗时间
  • 原文地址:https://www.cnblogs.com/ainubis/p/3990285.html
Copyright © 2020-2023  润新知