• git



    Git简介:        Git是目前世界上最先进的分布式版本控制系统(没有之一)。
    这个软件用起来就应该像这个样子,能记录每次文件的改动:
    版本   用户   说明                                       日期
    1       张三   删除了软件服务条款             5 7/12 10:38
    2       张三   增加了License人数限制        7/12 18:09
    3       李四    财务部门调整了合同金额     7/13 9:51
    4       张三   延长了免费升级周期            7/14 15:17

    安装Git
    1、Ubuntu安装git
           sudo apt-get install git
    2.  设置
            git config --global user.name "Your Name"
            git config --global user.email "email@example.com" 
    //usr.name什么的都是GitHub注册时候的,输入命令的时候就不要冒号了

    安装Vundle插件管理器  //可以让vim鼠标定位和显示错误信息
            $ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
     
            $ cd ~/

            $ mv .vimrc vimrc.bak

            $ git clone https://github.com/meihao1203/vimrc

            $ cd vimrc/

            $ cp vimrc ~/.vimrc

            $ vim

            :PluginInstall然后等他下载完就可以了
            :BundleUpdate更新插件
            :BundleClean清除不再使用的插件
            :BundleList列出所有插件
            :BundleSearch查找插件
    创建版本库
    版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    第一步:选择一个合适的地方,创建一个空目录:
    $ mkdir learngit
    $ cd learngit
    $ pwd
    /Users/michael/learngit

    第二步:通过

    git init命令把这个目录变成Git可以管理的仓库










    $ git init

    Initialized empty Git repository in /Users/michael/learngit/.git/

    如果你没有看到

    .git目录,那是因为这个目录默认是隐藏的,用

    ls -ah命令就可以看见。





    第三部:把文件添加到版本库

    现在我们编写一个

    readme.txt文件,内容如下:


    //一定要放到

    learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件











    Git is a version control system.

    Git is free software.






    用命令

    git add告诉Git,把文件添加到仓库:









    $ git add readme.txt



    用命令

    git commit告诉Git,把文件提交到仓库:










    $ git commit -m "wrote a readme file"     //冒号里面的是注释

    [master (root-commit) cb926e7] wrote a readme file

    1 file changed, 2 insertions(+)

    create mode 100644 readme.txt



    //

    -m 
    后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。













    //可以add多个文件,一次提交

    $ git add file1.txt

    $ git add file2.txt file3.txt

    $ git commit -m "add 3 files."






    查看库当前状态

    我们继续修改readme.txt文件,改成如下内容:









    Git is a distributed version control system.

    Git is free software.




    运行

    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:   readme.txt

    #

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




    git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.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.



    从上面的命令输出看到,我们在第一行添加了一个“distributed”单词。




    修改后提交到库:








    $ git add readme.txt





    运行

    git status看看当前仓库的状态:










    $ git status

    # On branch master

    # Changes to be committed:

    #   (use "git reset HEAD <file>..." to unstage)

    #

    #       modified:   readme.txt

    #




    //git status告诉我们,将要被提交的修改包括readme.txt





    提交:









    $ git commit -m "add distributed"

    [master ea34578] add distributed

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












    $ git status

    # On branch master

    nothing to commit (working directory clean)



    //Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。












    •要随时掌握工作区的状态,使用git status命令。

    •如果git status告诉你有文件被修改过,用git diff可以查看修改内容。




    版本回退

    修改readme.txt文件如下:









    Git is a distributed version control system.

    Git is free software distributed under the GPL.



    然后尝试提交:









    $ git add readme.txt

    $ git commit -m "append GPL"

    [master 3628164] append GPL

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





    git log命令查看相应文件一共有几个版本提交到库










    $ git log

    commit 3628164fb26d48395383f8f31179f24e0882e1e0

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Tue Aug 20 15:11:49 2013 +0800




        append GPL




    commit ea34578d5496d7dd233c827ed32a8cd576c5ee85

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Tue Aug 20 14:53:12 2013 +0800




        add distributed




    commit cb926e7ea50ad11b8f9e909c05226233bf755030

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Mon Aug 19 17:51:55 2013 +0800




        wrote a readme file




    //git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是

    append GPL,上一次是

    add distributed,最早的一次是

    wrote a readme file





    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上

    --pretty=oneline参数:










    $ git log --pretty=oneline

    3628164fb26d48395383f8f31179f24e0882e1e0    append GPL

    ea34578d5496d7dd233c827ed32a8cd576c5ee85    add distributed

    cb926e7ea50ad11b8f9e909c05226233bf755030    wrote a readme file



    //前面的是版本号




    要会退到前面的版本:git reset










    $ git reset --hard HEAD^

    HEAD is now at ea34578 add distributed




    //HEAD表示当前版本,上一个版本HEAD^,上上一个版本HEAD^^,网上100个版本HEAD~100









    $ cat readme.txt

    Git is a distributed version control system.

    Git is free software.






    回退玩之后









    $ git log

    commit ea34578d5496d7dd233c827ed32a8cd576c5ee85

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Tue Aug 20 14:53:12 2013 +0800




        add distributed




    commit cb926e7ea50ad11b8f9e909c05226233bf755030

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Mon Aug 19 17:51:55 2013 +0800




        wrote a readme file



    最新的那个版本  

    append GPL  已经看不到了!


    ****只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个

    append GPL

    commit id

    3628164...,于是就可以指定回到未来的某个版本:










    //版本号没必要写全,前几位就可以了,Git会自动去找

    $ git reset --hard 3628164

    HEAD is now at 3628164 append GPL












    $ cat readme.txt

    Git is a distributed version control system.

    Git is free software distributed under the GPL.







    Git的版本回退速度非常快,因为Git在内部有个指向当前版本的

    HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向

    append GPL


    git-head


    改为指向

    add distributed


    git-head-move


    然后顺便把工作区的文件更新了。所以你让

    HEAD指向哪个版本号,你就把当前版本定位在哪。




    当你用$ git reset --hard HEAD^回退到

    add distributed版本时,再想恢复到

    append GPL,就必须找到

    append GPLcommit id。Git提供了一个命令

    git reflog用来记录你的每一次命令:










    $ git reflog

    ea34578 HEAD@{0}: reset: moving to HEAD^

    3628164 HEAD@{1}: commit: append GPL

    ea34578 HEAD@{2}: commit: add distributed

    cb926e7 HEAD@{3}: commit (initial): wrote a readme file



    第二行显示

    append GPLcommit id

    3628164,这样上面的命令窗口关闭,不知道前面的版本号也可以查看








    工作区和暂存区

    就是你在电脑里能看到的目录,比如我的

    learngit文件夹就是一个工作区:


    版本库:工作区有一个隐藏目录

    .git,这个不算工作区,而是Git的版本库。


    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支

    master,以及指向

    master的一个指针叫

    HEAD














    git-repo
    git-stage
    git-stage-after-commit










    撤销修改


    readme.txt中添加了一行:










    $ cat readme.txt

    Git is a distributed version control system.

    Git is free software distributed under the GPL.

    Git has a mutable index called stage.

    Git tracks changes of files.

    My stupid boss still prefers SVN.












    $ 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:   readme.txt

    #

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




    git checkout -- file可以丢弃工作区的修改:










    $ git checkout -- readme.txt







    命令

    git checkout -- readme.txt意思就是,把

    readme.txt文件在工作区的修改全部撤销,这里有两种情况:


    一种是

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


    一种是

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


    总之,就是让这个文件回到最近一次

    git commit

    git add时的状态。


    现在,看看

    readme.txt的文件内容:











    $ cat readme.txt

    Git is a distributed version control system.

    Git is free software distributed under the GPL.

    Git has a mutable index called stage.

    Git tracks changes of files.






    删除文件










    $ git add test.txt

    $ git commit -m "add test.txt"

    [master 94cdc44] add test.txt

    1 file changed, 1 insertion(+)

    create mode 100644 test.txt












    $ rm test.txt



    //Git知道你删除了文件,因此,工作区和版本库就不一致了,

    git status命令会立刻告诉你哪些文件被删除了:











    $ git status

    # On branch master

    # Changes not staged for commit:

    #   (use "git add/rm <file>..." to update what will be committed)

    #   (use "git checkout -- <file>..." to discard changes in working directory)

    #

    #       deleted:    test.txt

    #

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




    确实要从版本库中删除该文件,那就用命令

    git rm删掉,并且

    git commit











    $ git rm test.txt

    rm 'test.txt'

    $ git commit -m "remove test.txt"

    [master d17efd8] remove test.txt

    1 file changed, 1 deletion(-)

    delete mode 100644 test.txt




    删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:










    $ git checkout -- test.txt










  • 相关阅读:
    del:根据索引值删除元素
    Python insert()方法插入元素
    Python extend()方法添加元素
    Python append()方法添加元素
    Python list列表添加元素的3种方法
    什么是序列,Python序列详解(包括序列类型和常用操作)
    Python运算符优先级和结合性一览表
    Python print()函数高级用法
    Python input()函数:获取用户输入的字符串
    Python变量的定义和使用
  • 原文地址:https://www.cnblogs.com/meihao1203/p/8690039.html
Copyright © 2020-2023  润新知