Git教程

作者: 飘摇的水草 | 来源:发表于2022-04-25 11:03 被阅读0次
    安装

    mac上直接从AppStore安装Xcode,Xcode集成了Git,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

    安装完成后,还需要最后一步设置,在命令行输入:

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    

    注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    版本库

    版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,通过 git init 命令把这个目录变成Git可以管理的仓库:

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

    当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

    提交代码

    第一步,用命令git add告诉Git,把文件添加到仓库:
    第二步,用命令git commit告诉Git,把文件提交到仓库:

    $ git add readme.txt
    $ git commit -m "wrote a readme file"
    

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

    当我们修改文件之后,可以使用 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

    $ git add readme.txt
    

    在执行第二步git commit之前,我们再运行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 e475afc] add distributed
     1 file changed, 1 insertion(+), 1 deletion(-)
    

    提交后,我们再用git status命令看看仓库的当前状态:

    $ git status
    On branch master
    nothing to commit, working tree clean
    
    版本回退

    我们用 git log 命令查看历史记录,时间显示从从最近到最远

    $ git log
    commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 21:06:15 2018 +0800
    
        append GPL
    
    commit e475afc93c209a690c39c13a46716e8fa000c366
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 21:03:36 2018 +0800
    
        add distributed
    
    commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 20:59:18 2018 +0800
    
        wrote a readme file
    

    看到的一大串递增的数字是一个SHA1计算出来的一个非常大的数字,用十六进制表示

    在Git中,用HEAD表示当前版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。现在,我们要把当前版本回退到上一个版本add distributed,就可以使用git reset命令:

    $ git reset --hard HEAD^
    HEAD is now at e475afc add distributed
    

    看看readme.txt的内容是不是版本add distributed:

    $ cat readme.txt
    Git is a distributed version control system.
    Git is free software.
    

    如果此时我们想把回退的代码再还原回来,只要找到最新的那个 commit id即可:

    $ git reset --hard 1094a
    HEAD is now at 83b0afe append GPL
    

    版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

    Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

    ┌────┐
    │HEAD│
    └────┘
       │
       └──> ○ append GPL
            │
            ○ add distributed
            │
            ○ wrote a readme file
    

    改为指向add distributed:

    ┌────┐
    │HEAD│
    └────┘
       │
       │    ○ append GPL
       │    │
       └──> ○ add distributed
            │
            ○ wrote a readme file
    

    Git提供了一个命令git reflog用来记录你的每一次命令,通过这个命令我们可以找到之前的 commit id:

    $ git reflog
    e475afc HEAD@{1}: reset: moving to HEAD^
    1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
    e475afc HEAD@{3}: commit: add distributed
    eaadf4e HEAD@{4}: commit (initial): wrote a readme file
    

    相关文章

      网友评论

          本文标题:Git教程

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