zoukankan      html  css  js  c++  java
  • git命令评测

    近日得知git命令在库进行操作,查找git尽管小命令(当然,也不能太小),但他们是一个非常强大的组合,更重要的是,它是非常的效果不同状态的命令是不一样的打。该博文总结git命令。。

    Git命令

    命令小结

    命令 功能
    git init 把当前目录初始化为默认的git库
    git add 文件名称 向git库中加入一个文件
    git rm 文件名称 从git库中删除一个文件
    git status 查看当前库中进行的任务
    git diff 文件名称 add前查看工作区和暂存区的区别
    git commit -m “改动内容” 把改动内容提交上去,用于区别版本号
    git checkout – 文件名称 在add之前把文件恢复到上次交付,在commit之前恢复到暂存区的状态
    git log [–pretty=oneline] 显示这个库里都干过啥
    git relog 查看命令历史,以便确定要回到未来的哪个版本号
    git reset HEAD 文件名称 能够把暂存区的改动撤销掉
    git reset –hard HEAD^ 回退到上一个版本号
    git reset –hard 版本号号 回退到某个版本号

    注意假设一个库里的非常多文件是合用一个版本号号的,也就是说变更版本号号后,相应的全部的文件都会回退;

    基本命令

    git 建立库,我们是在工作区中改动文件的,工作区能够有非常多文件;
    git add 能够把工作区(working tree)下改动的文件或加入的文件加入到临时存储的区域(index file)。
    git commit 做的事情是把index file中改动提交到分支里。默认的分区是master;

    git diff

    diff 就是difference的意思,查看不同,依据工作区(working tree)、缓存区(index file)和版本号区(master)的不同,药效不一样哦 -_-!
    1. git diff 文件名称:是查看working tree与index file 的区别的。也就是说改动之后add之前能够用这个看改了什么;
    2. git diff – cached:是查看index file与master的区别的。

    add之后,假设你忘记全部文件做的改动是什么。用这个;
    3. git diff HEAD 文件名称:是查看working tree和master的区别的。add之后。能够用这个看具体每一个文件改了什么;

    举个栗子

    在工作区新建一个文件hello.cpp

    #include<iostream>
    using namespace std;
    int main()
    {
            cout<<"快使用"<<endl;
            return 0;
    }

    然后加入到版本号库里面

    $ git add hello.cpp 
    $ git commit -m "新建hello.cpp"
    [master 86a0afb] 新建hello.cpp
     1 file changed, 7 insertions(+)
     create mode 100644 hello.cpp
    $ git status
    位于分支 master
    无文件要提交。干净的工作区
    

    然后改动hello.cpp文件

    #include<iostream>
    using namespace std;
    int main()
    {
            cout<<"快使用双截棍"<<endl;
            return 0;
    }

    加入到暂存区里

    $ git add hello.cpp 
    $ git status
    位于分支 master
    要提交的变更:
      (使用 "git reset HEAD <file>..." 撤出暂存区)
    
        改动:     hello.cpp
    

    再改动hello.cpp文件

    #include<iostream>
    using namespace std;
    int main()
    {
            cout<<"快使用双截棍,嗯哪咋地"<<endl;
            return 0;
    }

    这时候工作区、暂存区、版本号区的文件都不一样啦

    $ git status
    位于分支 master
    要提交的变更:
      (使用 "git reset HEAD <file>..." 撤出暂存区)
    
        改动:     hello.cpp
    
    尚未暂存以备提交的变更:
      (使用 "git add <file>..." 更新要提交的内容)
      (使用 "git checkout -- <file>..." 丢弃工作区的改动)
    
        改动:     hello.cpp
    

    使用git diff命令来一一查看哈

    $ git diff hello.cpp
    diff --git a/hello.cpp b/hello.cpp
    index 4cbc284..32531fa 100644
    --- a/hello.cpp
    +++ b/hello.cpp
    @@ -2,6 +2,6 @@
     using namespace std;
     int main()
     {
    -       cout<<"快使用双截棍"<<endl;
    +       cout<<"快使用双截棍,嗯哪咋地"<<endl;
            return 0;
     }
    

    上面第10行是暂存区中的内容,而第11行是工作区中的内容。说明git diff 文件名称 比較的是暂存区与工作区的内容。

    事实上这里假设用git diff – 文件名称也能达到同样的效果,关于 – 的使用方法会在后面相信讨论。

    $ git diff --cached
    diff --git a/hello.cpp b/hello.cpp
    index 4cadd9e..4cbc284 100644
    --- a/hello.cpp
    +++ b/hello.cpp
    @@ -2,6 +2,6 @@
     using namespace std;
     int main()
     {
    -       cout<<"快使用"<<endl;
    +       cout<<"快使用双截棍"<<endl;
            return 0;
     }
    

    第10行是版本号库的内容,第11行是暂存区中的内容,说明git diff –cached比較的是版本号库与暂存区的内容

    $ git diff HEAD hello.cpp
    diff --git a/hello.cpp b/hello.cpp
    index 4cadd9e..32531fa 100644
    --- a/hello.cpp
    +++ b/hello.cpp
    @@ -2,6 +2,6 @@
     using namespace std;
     int main()
     {
    -       cout<<"快使用"<<endl;
    +       cout<<"快使用双截棍,嗯哪咋地"<<endl;
            return 0;
     }
    

    比較的是版本号库与工作区的内容;

    git checkout – 文件名称

    case 1. git checkout – 文件名称,在改动文件后add到暂存区之前用版本号区的文件替换工作区的,
    case 2. 在add到缓存区后,commit到版本号区之前,再一次改动文件。就用暂存区中的文件覆盖工作区。

    $ git checkout -- hello.cpp
    $ cat hello.cpp
    #include<iostream>
    using namespace std;
    int main()
    {
        cout<<"快使用双截棍"<<endl;
        return 0;
    }
    dragon@dragon-virtual-machine:~/code/learngit$ 
    

    case 3.在add到缓存区后,commit到版本号区之前。再一次改动文件。假设想用版本号区的文件覆盖能够有两种做法:
    方法一:

    $ git checkout HEAD hello.cpp
    $ cat hello.cpp
    #include<iostream>
    using namespace std;
    int main()
    {
        cout<<"快使用"<<endl;
        return 0;
    }
    $ git status
    位于分支 master
    无文件要提交,干净的工作区
    

    HEAD是当前版本号库的意思,这样的做法顺便将暂存区清空了
    方法二:

    $ git reset HEAD 
    重置后撤出暂存区的变更:
    M   hello.cpp
    $ git checkout -- hello.cpp
    $ cat hello.cpp 
    #include<iostream>
    using namespace std;
    int main()
    {
        cout<<"快使用"<<endl;
        return 0;
    }
    
    

    先清空暂存区,然后再使用git checkout – 文件名称,用版本号去来替换工作区,相当于case 1.。

    git的删除与恢复操作

    在工作区,我们能够直接rm命令手动删除一个文件。可是这样在版本号库里面并没有变化。所以我们假设想在版本号库里面删除这个文件。能够不用手动删除,直接用git rm 文件名称
    然后git commit -m ” 删除。。。

    ”来提交到版本号库;可是假设出现勿删还是能够恢复的
    case 1.手动删除没有提交到暂存区。使用git checkout – 文件名称,用版本号区文件覆盖工作区
    case 2.使用git rm删除.还没有提交

    
    $ ls
    hehe  hello.cpp  readme.txt
    $ git rm hello.cpp 
    rm 'hello.cpp'
    $ ls
    hehe  readme.txt
    t$ git status
    位于分支 master
    要提交的变更:
      (使用 "git reset HEAD <file>..." 撤出暂存区)
    
        删除:     hello.cpp
    
    $ git checkout HEAD hello.cpp
    $ ls
    hehe  hello.cpp  readme.txt
    $ git status
    位于分支 master
    无文件要提交,干净的工作区

    当然也能够使用git checkout 的另外一种方法
    case 3. 提交删除。能够使用版本号回退的方法来恢复文件,键上面git命令表格里的git reset

    版权声明:本文博主原创文章,欢迎转载和分享。但请声明来源http://blog.csdn.net/zhzz2012

  • 相关阅读:
    导线截面积与导线直径及其载流量之间的关系
    quartus II 自动生成testbench
    几乎每个文件里面都有 #ifdef __cplusplus extern "C" { #endif 可我没找到程序里那个地方定义了__cplusplus 啊?这又是怎么回事呢?
    jni集成第3方third party动态库libwebrtc_audio_preprocessing.so时android.mk的编写
    升级svn 到1.7
    FFmpeg编码详细流程
    FFmpeg解码详细流程
    centos 在CentOS下编译FFmpeg
    centos编译 Compiling FFmpeg on CentOS RHEL Fedora
    C语言的面向对象设计之 X264,FFMPEG 架构探讨
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4852792.html
Copyright © 2011-2022 走看看