美文网首页
Git学习整理-还在持续更新中

Git学习整理-还在持续更新中

作者: Thor_果冻 | 来源:发表于2019-03-17 13:57 被阅读0次

    [TOC]简书什么时候才能支持目录啊。。。。。。。。。。。

    Git学习整理

    更新2019-8-22

    学习自
    极客时间-玩转Git三剑客
    Git官网
    猴子都能懂得git入门

    在线git练习
    常用 Git 命令清单
    一个好用的Git命令大全

    安装Git

    官网安装教程

    Windows打开Git Bash输入git --version查看当前安装git版本信息,如果是Mac直接打开命令行输入git --version

    Git最小配置

    git config --global user.name "dongdong.wu"
    git config --global user.email "withwudongdong@gmail.com"
    git config --global color.ui auto
    

    config的三个作用域

    git config --local    //只针对某个仓库
    git config --global   //针对当前用户所有仓库
    git config --system   //针对当前系统所有登录的用户
    

    显示config的配置信息

    git config --list
    git config --list --local
    git config --list --global
    git config --list --system
    

    也可以查看当前用户下的.gitconfig

    cd
    cat .gitconfig
    

    创建Git仓库

    //1.创建一个新项目
    mkdir GitTest
    //2.初始化该项目
    cd GitTest
    git init  //执行完成后,提示Initialized empty Git repository in C:/Users/Thor/Desktop/GitTest/.git/
    //3.查看是否初始化项目成功,用下面命令可以看到一个.git文件表示初始化成功
    ls -al
    

    提交认知

    一般我们自己本地git在提交分为3个区域:

    1. 我们自己的工作目录
    2. git add files之后文件进入的暂存区
    3. git commit之后文件进入的版本历史

    如果有远程仓库,给Git正在的区域分布为下面四个区域:

    • Workspace:工作区
    • Index / Stage:暂存区
    • Repository:仓库区(或本地仓库)
    • Remote:远程仓库

    下面图片来源为:常用 Git 命令清单

    引用阮一峰的网络日志的图片

    在GitTest添加四个文件

    • touch one.txt two.txt three.txt创建三个文件,然后用ls查看当前目录下是否有这四个文件。
    • mkdir four创建一个文件夹,进入文件夹cd four,创建一个文件touch four_dir_one.txt

    这样之后我们的四个文件都创建好了。

    查看当前工作目录与暂存区的关系

    git status,输入当前命令可以看到下面提示。

    On branch master
    
    No commits yet
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
        fourDir/
        one.txt
        three.txt
        two.txt
    
    nothing added to commit but untracked files present (use "git add" to track)
    

    告诉我们下面这四个文件git从来没有管理过,那怎么可以管理呢?可以看到上面提示中已经给出我们答案了git add 文件就可以添加管理了。

    git add 命令简单介绍

    • git add [file]:将文件添加进暂存区

    • git add [file1] [file2] ...:将多个文件添加进暂存区

    • git add -u:将文件的修改、文件的删除,添加到暂存区。

    • git add .:将文件的修改,文件的新建,添加到暂存区。

    • git add -A:将文件的修改,文件的删除,文件的新建,添加到暂存区。

    • git add -u 以及他们之间的区别
      git add -A相对于git add -u命令的优点 : 可以提交所有被删除、被替换、被修改和新增的文件到数据暂存区,而git add -u 只能操作跟踪过的文件
      git add -A等同于git add -all

    • git add *Controller :将以Controller结尾的文件的所有修改添加到暂存区

    • git add Hello* :将所有以Hello开头的文件的修改添加到暂存区 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...

    • git add Hello? :将以Hello开头后面只有一位的文件的修改提交到暂存区 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的

    简单的例子

    git add 可以直接后面加多个文件或文件夹

    • 添加一个文件方式

      thor@tiantian:~/Documents/GitTest$ git add one.txt 
      thor@tiantian:~/Documents/GitTest$ git status
      On branch master
      
      No commits yet
      
      Changes to be committed:
        (use "git rm --cached <file>..." to unstage)
      
       new file:   one.txt
      
      Untracked files:
        (use "git add <file>..." to include in what will be committed)
      
       fourDir/
       three.txt
       two.txt
      
      
    • 添加多个文件

      thor@tiantian:~/Documents/GitTest$ git add two.txt fourDir/
      thor@tiantian:~/Documents/GitTest$ git status
      On branch master
      
      No commits yet
      
      Changes to be committed:
        (use "git rm --cached <file>..." to unstage)
      
       new file:   fourDir/four_dir_one.txt
       new file:   one.txt
       new file:   two.txt
      
      Untracked files:
        (use "git add <file>..." to include in what will be committed)
      
       three.txt
      
      
    • 添加所有新建的

      thor@tiantian:~/Documents/GitTest$ git add .
      thor@tiantian:~/Documents/GitTest$ git status
      On branch master
      
      No commits yet
      
      Changes to be committed:
        (use "git rm --cached <file>..." to unstage)
      
        new file:   fourDir/four_dir_one.txt
        new file:   one.txt
        new file:   three.txt
        new file:   two.txt
      

    进行一次commit操作

    git commit命令

    thor@tiantian:~/Documents/GitTest$ git commit -m "add four files"
    [master (root-commit) b989dc2] add four files
     4 files changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 fourDir/four_dir_one.txt
     create mode 100644 one.txt
     create mode 100644 three.txt
     create mode 100644 two.txt
    

    git diff 命令简单介绍

    • git diff 比较的是工作区和暂存区的差别
    • git diff --cached 比较的是暂存区和版本库的差别
    • git diff HEAD 可以查看工作区和版本库的差别

    git commit 命令简单介绍

    • git commit -m [message]:提交暂存区到仓库区
    • git commit [file1] [file2] ... -m [message]:提交暂存区的指定文件到仓库区
    • git commit -a:提交工作区自上次commit之后的变化,直接到仓库区
    • git commit -v:提交时显示所有diff信息
    • git commit --amend -m [message]:使用一次新的commit,替代上一次提交。如果代码没有任何新变化,则用来改写上一次commit的提交信息
    • git commit --amend [file1] [file2] ...: 重做上一次commit,并包括指定文件的新变化

    查看一下提交记录

    git log命令查看一下当前提交记录

    thor@tiantian:~/Documents/GitTest$ git log
    commit b989dc26fa089d76de381ace2e360d69ab60e9ea (HEAD -> master)
    Author: dongdong.wu <withwudongdong@gmail.com>
    Date:   Sun Mar 17 14:49:31 2019 +0800
    
        add four files
    

    git log 命令简单介绍

    具体可以查看Git官网查看,下面我就简单列举我用过的。官网地址

    • git log:会按提交时间列出所有的更新,最近的更新排在最上面
      • 添加参数-n:显示最近提交n次记录。如git log -1显示最近提交的一次记录

        thor@tiantian:~/Documents/GitTest$ git log -1
        commit 218dc3bf854ae9f21c335d45c7370a9d3bb5ebb3 (HEAD -> master)
        Author: dongdong.wu <withwudongdong@gmail.com>
        Date:   Sun Mar 17 19:47:08 2019 +0800
        
            mv one.txt to one.md
        
      • 添加参数--since, --after:仅显示指定时间之后的提交。时间格式:比如说具体的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。如git log --after="2019.3.17"显示2019年3月17日之后提交的

      • 添加参数--until, --before:仅显示指定时间之前的提交。

      • 添加参数--author:仅显示指定作者相关的提交。如:git log --author="dongdong.wu"

      • 添加参数--committer:仅显示指定提交者相关的提交。如:git log --committer="dongdong.wu"

      • 提交者和作者的区别

      • 添加参数-p:展开显示每次提交的内容差异。如git log -p -1显示最近一次提交的变化差异。该选项除了显示基本信息之外,还在附带了每次 commit 的变化。当进行代码审查,或者快速浏览某个搭档提交的 commit 的变化的时候,这个参数就非常有用了。

      • 添加参数--stat:仅显示简要的增改行数统计

      • 添加参数--pretty:可以指定使用完全不同于默认格式的方式展示提交历史

        • 一般用的参数--pretty:format"一些参数具体看官网参数说明"。例如:$ git log --pretty=format:"%h - %an, %ar : %s"
      • 添加参数--oneline--pretty=oneline --abbrev-commit 的简化用法。同时可以获得最短的CommitId

        thor@tiantian:~/Documents/GitTest$ git log --oneline
        218dc3b (HEAD -> master) mv one.txt to one.md
        b989dc2 add four files
        
      • 添加参数--graph:显示 ASCII 图形表示的分支合并历史。

    至此一次简单的git提交就完成了。

    git修改文件名称

    第一种笨方法

    # 第一步查看当前文件夹下有哪些文件
    thor@tiantian:~/Documents/GitTest$ ls
    fourDir  one.txt  three.txt  two.txt
    
    # 第二步,我要把one.txt 重名了为 one.md
    thor@tiantian:~/Documents/GitTest$ mv one.txt one.md
    
    # 第三步 看本地文件是否重命名成功
    thor@tiantian:~/Documents/GitTest$ ls
    fourDir  one.md  three.txt  two.txt
    
    # 第四步 把新改的文件添加到暂存区
    thor@tiantian:~/Documents/GitTest$ git add one.md
    
    # 第五步 删除原来暂存区中的文件,即one.txt
    thor@tiantian:~/Documents/GitTest$ git rm one.[按两下TAB键会有下面提示]
    one.md   one.txt  
    thor@tiantian:~/Documents/GitTest$ git rm one.txt
    rm 'one.txt'
    
    # 第六步 查看当前暂存区,可以可看到提示就是 renamed:    one.txt -> one.md
    thor@tiantian:~/Documents/GitTest$ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        renamed:    one.txt -> one.md
    
    

    第二种方法(推荐)

    1. 因为使用了第一种方法文件名已经被改变了,所以我们要先恢复到原来版本状态。首先先用git reset --hard命令重置暂存区与工作区,与上一次commit保持一致。

    2. 然后通过git status可以看到改变的都被取消了。在通过ls命令可以看到文件名被恢复原来样子了。

    3. 现在我们就通过一个简单命令实现第一种方法。git mv one.txt one.md就可以实现第一种方法效果

      thor@tiantian:~/Documents/GitTest$ git mv one.txt one.md
      thor@tiantian:~/Documents/GitTest$ git status
      On branch master
      Changes to be committed:
        (use "git reset HEAD <file>..." to unstage)
      
       renamed:    one.txt -> one.md
      
      thor@tiantian:~/Documents/GitTest$ ls
      fourDir  one.md  three.txt  two.txt
      
    4. 提交变更

      thor@tiantian:~/Documents/GitTest$ git commit -m "mv one.txt to one.md"
      [master 218dc3b] mv one.txt to one.md
       1 file changed, 0 insertions(+), 0 deletions(-)
       rename one.txt => one.md (100%)
      thor@tiantian:~/Documents/GitTest$ git log
      commit 218dc3bf854ae9f21c335d45c7370a9d3bb5ebb3 (HEAD -> master)
      Author: dongdong.wu <withwudongdong@gmail.com>
      Date:   Sun Mar 17 19:47:08 2019 +0800
      
          mv one.txt to one.md
      
      commit b989dc26fa089d76de381ace2e360d69ab60e9ea
      Author: dongdong.wu <withwudongdong@gmail.com>
      Date:   Sun Mar 17 14:49:31 2019 +0800
      
          add four files
      

    git rm 命令简单介绍

    • git rm [file1] [file2] ...: 删除工作区文件,并且将这次删除放入暂存区
    • git rm --cached [file]:停止追踪指定文件,但该文件会保留在工作区

    git reset 命令简单介绍

    • git reset --hard:重置暂存区与工作区,与上一次commit保持一致
    • git reset --hard HEAD^:用HEAD表示当前版本,上一个版本就是HEAD^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
    • git reset --hard [commit-id]:commitId可以通过git log --graph --oneline获取的commitId就是最短的id

    git branch 命令简单介绍

    一般用于分支的操作,比如创建分支,查看分支等等。

    因为现有项目还未有分支用我当前项目下来展示一下。

    • git branch:列出本地已经存在的分支,并且在当前分支的前面用"*"标记

      dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev)
      $ git branch
      * dev
        develop
        master
      
    • git branch -r:查看远程版本库分支列表

      dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev)
      $ git branch -r
        origin/HEAD -> origin/master
        origin/develop
        origin/master
        origin/release-1.0.2
        origin/release-1.0.4
      
    • git branch -a:查看所有分支列表,包括本地和远程

      dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev)
      $ git branch -a
      * dev
        develop
        master
        remotes/origin/HEAD -> origin/master
        remotes/origin/develop
        remotes/origin/master
        remotes/origin/release-1.0.2
        remotes/origin/release-1.0.4
      
    • git branch [branch-name]:新建一个分支,但依然停留在当前分支

      thor@tiantian:~/Documents/GitTest$ git branch
      * master
      thor@tiantian:~/Documents/GitTest$ git branch test
      thor@tiantian:~/Documents/GitTest$ git branch -v
      * master 218dc3b mv one.txt to one.md
        test   218dc3b mv one.txt to one.md
      
    • git branch [branch-name] [commit-id]:新建一个分支,指向指定commit

      thor@tiantian:~/Documents/GitTest$ git branch
      * master
        test
      thor@tiantian:~/Documents/GitTest$ git log --oneline
      218dc3b (HEAD -> master, test) mv one.txt to one.md
      b989dc2 add four files
      thor@tiantian:~/Documents/GitTest$ git branch commitBranch b989dc2
      thor@tiantian:~/Documents/GitTest$ git branch -v
        commitBranch b989dc2 add four files
      * master       218dc3b mv one.txt to one.md
        test         218dc3b mv one.txt to one.md
      
    • git branch -d [branch-name]:删除分支,如果在分支中有一些未merge的提交,那么会删除分支失败,此时可以使用 git branch -D dev:强制删除dev分支

      thor@tiantian:~/Documents/GitTest$ git branch -v
      * master 218dc3b mv one.txt to one.md
        test   218dc3b mv one.txt to one.md
      thor@tiantian:~/Documents/GitTest$ git branch -d test 
      Deleted branch test (was 218dc3b).
      thor@tiantian:~/Documents/GitTest$ git branch -v
      * master 218dc3b mv one.txt to one.md
      
    • 删除远程分支

      • git push origin --delete [branch-name]

      • git branch -dr [remote/branch]

    • git branch -v:可以查看本地分支

      dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev)
      $ git branch -v
      * dev     ea08ab9 上传凭证添加拨打电话功能
        develop ea08ab9 上传凭证添加拨打电话功能
        master  bd017d3 正式版本号变更1.0.4.5
      
    • git branch -vv:可以查看本地分支对应的远程分支

      dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev)
      $ git branch -vv
      * dev     ea08ab9 上传凭证添加拨打电话功能
        develop ea08ab9 [origin/develop] 上传凭证添加拨打电话功能
        master  bd017d3 [origin/master] 正式版本号变更1.0.4.5
      
    • git branch -m oldName newName:给分支重命名。

      thor@tiantian:~/Documents/GitTest$ git branch 
      * master
      thor@tiantian:~/Documents/GitTest$ git branch test1
      thor@tiantian:~/Documents/GitTest$ git branch -v
      * master 218dc3b mv one.txt to one.md
        test1  218dc3b mv one.txt to one.md
      thor@tiantian:~/Documents/GitTest$ git branch -m test1 test
      thor@tiantian:~/Documents/GitTest$ git branch -v
      * master 218dc3b mv one.txt to one.md
        test   218dc3b mv one.txt to one.md
      
     2. Git checkout
    
        1. 操作文件  2. 操作分支
    
        2.1 操作文件
    
          2.1.1 git checkout filename 放弃单个文件的修改
    
          2.1.2 git checkout . 放弃当前目录下的修改
    
        2.2 操作分支
    
          2.2.1 git checkout master 将分支切换到master
    
          2.2.2 git checkout -b master 如果分支存在则只切换分支,若不存在则创建并切换到master分支,repo start是对git checkout -b这个命令的封装,将所有仓库的分支都切换到master,master是分支名,
    
        2.3 查看帮助
    
          git checkout --help
    
          当然git checkout还有许多命令,但这些已经能满足我们日常开发所需
    

    相关文章

      网友评论

          本文标题:Git学习整理-还在持续更新中

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