美文网首页
第三章 时光机穿梭

第三章 时光机穿梭

作者: kison_ | 来源:发表于2018-06-15 13:56 被阅读0次

    1. 版本回退

    修改之前readme.txt的内容,运行git status命令查看结果

    $ git status

    On branch master

    Changes not staged for commit:

      (use "git add ..." to update what will be committed)

      (use "git checkout -- ..." to discard changes in working directory)

        modified:   readme.txt

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

    Git status命令可以时刻掌握仓库当前状态。以上结果表明,teadme.txt已经被改动了,但还没有准备提交的修改。

    如何查看修改内容呢,使用git diff命令查看

    $ git diff readme.txt

    diff --git a/readme.txt b/readme.txt

    index 46d49bf..9247db6 100644

    --- a/readme.txt

    +++ b/readme.txt@@ -1,2 +1,2 @@

    -Git is a version control system.

    +Git is a distributed version control system.

     Git is free software.

    Git diff(查看difference),了解到修改详情后,需要重新提交文件到仓库

    $ git add readme.txt

    $ git commit -m "add distributed"

    [master e475afc] add distributed

     1 file changed, 1 insertion(+), 1 deletion(-)

    提交后查看仓库状态:

    $ git status

    On branch master

    nothing to commit, working tree clean

    总结:

    Git status查看文件是否被修改,查看仓库状态。

    Git diff查看修改内容。

    2. 版本回退

    在Git中,我们可以用git log命令查看版本历史纪录:

    $ git log

    commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)

    Author: Michael Liao

    Date:   Fri May 18 21:06:15 2018 +0800

        append GPL

    commit e475afc93c209a690c39c13a46716e8fa000c366

    Author: Michael Liao

    Date:   Fri May 18 21:03:36 2018 +0800

        add distributed

    commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0

    Author: Michael Liao

    Date:   Fri May 18 20:59:18 2018 +0800

        wrote a readme file

    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

    $ git log --pretty=oneline

    c585e4a6ae21136fddf3fe6e447aa8427b31fc78 (HEAD -> master) recommit

    1f60bf7e092fd94c9445d2a0743654e6603ad30e recommit

    9b6fa8aef3e22b607e03d8c0821e24f1581465b6 there is 4 files

    29b5091840a99a2cd7bf5681bd9c66ff704b0d58 wrote a readme file

    提示:前面那一串数字是commit id的版本号。

    每次提交一个新版本,实际上Git就会把他们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚的看到时间线。

    如何将文件回退到上一个版本呢?

    首先,git得需要知道版本号。在git中,用HEAD表示当前版本,上一个就是HEAD^,上上一个就是HEAD^^,上上上一个就是HEAD^^^,往上100个版本HEAD~100。

    现在要回退到上一个版本,就可以用git reset命令

    student30@CN01VRIAPC30 MINGW64 /g/learngit (master)

    $ git reset --hard HEAD^

    HEAD is now at 9b6fa8a there is 4 files

    如果想回溯到转换之前的版本呢?

    那得找到那一串数字的号码,然后通过reset版本号就可以了。

    $ git reset --hard c585e4a6ae21136fddf3fe6e447aa8427b31fc78

    HEAD is now at c585e4a recommit

    如果版本号丢失了,找不到怎么办呢?

    在Git中,提供了一个命令git reflog用来记录你的每一次命令:

    student30@CN01VRIAPC30 MINGW64 /g/learngit (master)

    $ git reflog

    c585e4a (HEAD -> master) HEAD@{0}: reset: moving to c585e4a6ae21136fddf3fe6e447aa8427b31fc78

    9b6fa8a HEAD@{1}: reset: moving to HEAD^

    1f60bf7 HEAD@{2}: reset: moving to HEAD^

    c585e4a (HEAD -> master) HEAD@{3}: commit: recommit

    1f60bf7 HEAD@{4}: commit: recommit

    9b6fa8a HEAD@{5}: commit: there is 4 files

    29b5091 HEAD@{6}: commit (initial): wrote a readme file

    总结:

    HEAD指向的版本就是当前版本,因此可以用命令git reset --hard commit_id来版本穿梭

    穿梭前,用git log查看提交历史,确定回到哪个版本

    要重返穿梭前,可以采用git reflog查看命令历史,以便找到回到的版本

    3. 工作区和暂存区

    工作区(working directory),就是电脑里能看到的目录,比如learngit文件夹就是一个工作区。

    版本库(Repository),工作区中一个隐藏目录.git,这个不算工作区,他是Git的版本库。

    版本库中很多重要的东西,其中最重要的称为index(或stage)的暂存区,还有Git为我们自动创价的第一这分支master,以及指向master的一个指针叫HEAD。

    之前往git版本库中添加文件时是分两步执行的:

    第一步git add添加文件,实际上是把文件修改添加到暂存区;

    第二步使用git commit提交更改,实际是把暂存区内容提交到当前分支。

    所以说,git add命令实际上十八要提交的所有修改放到暂存区(index),然后执行git commit就可以一次性把暂存区的所有修改提交到分支。

    4. 管理修改

    Git比其他版本控制器优秀的一大原因是,Git跟踪的是修改记录而并非文件。

    每次修改,如果不用git add到暂存区,那就不会加入到commit中。

    5.撤销修改

    当修改了文件后,查看当前status你会发现,Git告诉你,git checkout --file可以丢弃工作取得修改:

    $ git checkout -- readme.txt

    以上命令意为,把readme.txt文件在工作区的修改全部撤销,有两种情况:

    1. readme.txt自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态。

    2. readme.txt已经添加到暂存区后,又做了修改,现在撤销修改就回到添加到暂存区后的状态。

    如果已经把readme.txt加入暂存区怎么办?

    1.用命令git reset HEAD 可以把暂存区的修改撤销(unstage),重新放回工作区。

    $ git reset HEAD readme.txt

    Unstaged changes after reset:

    M    readme.txt

    2. 然后用checkout丢弃工作区的修改

    $ git checkout -- readme.txt

    $ git status

    On branch master

    nothing to commit, working tree clean

    总结:

    1. 如果该乱了工作区某个文件内容,想直接丢弃工作区的修改时,用命令git checkout -- file

    2. 当你不仅该乱了内容,还添加到了暂存区时,还想丢弃修改。有两步:

    1. 用命令git reset HEAD , 就回到了场景一

    2. 用命令git checkout -- file恢复

    3.已经提交了不合适的修改到版本库时,想要撤销本次提交,只能版本回退,前提是没有推送到远程库。

    6. 删除文件

    利用rm file可以删除文件。

    删除后用git commit确认删除,误删用git checkout恢复

    相关文章

      网友评论

          本文标题:第三章 时光机穿梭

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