Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Git基础

$
0
0

Git基础


工欲善其事必先利其器,作为一名程序员,对git工具的掌握是非常必要的.
Git的使用这里已经写的非常详细,感谢前辈.该文章只是个人的学习笔记,方便以后的查阅.走过的路至少要留下些脚印.

推荐一个在线练习Git命令的网站传送门

Git在Windows平台上的使用

Git安装

Git安装传送门

Windows平台上使用Git命令

链接文章中的git前总是加了个”$”符号,在Window平台并不需要.在Windows平台上我们可以使用cmd或者cmd的升级版PowerShell执行命令

像Java一样,Git命令的使用同样需要配置系统变量,不过,Git配置的是cmd目录,例如:F:\Program Files (x86)\Git\cmd;

配置流程:右键[我的电脑]->属性->高级系统设置->环境变量->系统变量->Path

初次使用Git前的配置
  • 配置用户信息

    用户信息配置命令

    git config --global user.name "John Doe"  
    git config --global user.email johndoe@example.com
    

    该命令配置完成后,表示你身份ID的生成,以后的每次提交都会附加该信息.在以后的日志查看中就会看到现在配置的名称和邮箱
    重复执行上述命令,可以修改配置的信息

  • 配置编辑器

    配置编辑器命令

    git config --global core.editor emacs
    

    NOTE:
    在程序升级时会保留配置信息
    检查配置信息命令 git config --list

获取Git仓库(repository)
  • 在现有目录中初始化仓库

    初始化仓库命令

    git init
    

    执行该命令后,将会在当前目录下生成.git文件夹,该文件夹内是初始化后的一些基础文件,禁止擅自修改或者删除

  • 从服务器端克隆现有仓库

    克隆仓库的命令

    git clone [url]
    

    例如:git clone https://github.com/libgit2/libgit2;
    该命令通常用于克隆或者说复制服务器端现有的仓库到本地;
    执行该命令后,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来;
    克隆下来的文件都是已跟踪状态并且处于未修改状态;
    默认情况下,克隆的仓库名与服务器端相同,如果自定义本地仓库的名字,那么执行该命令git clone [url] [NewRepName];

控制文件

这里写图片描述

  • 查看文件状态

    • 文件状态明细

      查看文件状态命令

      git status  
      
    • 文件状态简览

      查看文件简览状态命令

      git status -s 或 git status --short
      

      简览状态是指文件明细的展示方式,git status比较详细,git status -s则使用了一些字符来表示文件的状态

      • git status 的状态表现方式

        git status  
        On branch master
        Untracked files:
          (use "git add <file>..." to include in what will be committed)
        
            README
        
        nothing added to commit but untracked files present (use "git add" to track)
        
      • git status -s 的状态表现方式

        git status -s
         M README            -- 右边的M,文件被修改但未放至暂存区
        MM Rakefile          -- 修改后的文件提交至暂存区后,该文件在工作区又被修改了
        A  lib/git.rb        -- 新添加到暂存区的文件
        M  lib/simplegit.rb  -- 左边的M,文件被修改并放至暂存区
        ?? LICENSE.txt       -- 新添加的未跟踪状态文件
        
  • 暂存文件

    暂存命令

    git add FileName  
    git add all  
    git add lib/  递归跟踪文件
    

    执行该命令后,文件的状态变更为跟踪状态,并处于暂存区;跟踪可以是某个文件,也可以是某个目录,当时某个目录时,将会递归跟踪该目录下的文件

  • 暂存已修改的文件

    该情况是指工作区中修改并提交至暂存区的文件,再次该文件后进行暂存,这也说明工作区和暂存区可以同时存在已修改的文件,也就是简览状态的[ MM ]表示的这种情况,实际上只是文件名相同,内容已经发生改变,执行git add命令后,工作区的文件将会覆盖暂存区的文件.

  • 查看修改的文件

    • 查看处于暂存区的文件的变化

      查看未暂存区文件变化的命令

      git diff
      

      该命令查看的是暂存前后的变化(工作区文件与暂存区文件的不同)

    • 查看暂存的文件的变化

      查看暂存区文件变化的命令

      git diff --cached 或 git diff --staged (Git 1.6.1 及更高版本可用)
      

      该命令查看的是提交前后的变化(暂存区与服务器端文件的不同)

  • 提交更新

    提交命令

    git commit
    

    该方式,在提交时会启动文本编辑器要求输入本次提交的说明.默认的编辑器可以修改,查看上方的git config --global core.editor命令

    git commit -v
    

    该方式,在提交时会在文本编辑器中放入diff的信息,以便以后查看

    git commit -m "discription"
    

    该方式,在输入命令时就把提交说明附加上去了

    git commit -a
    

    该方式,省略执行git add这个命令,自动将所有已经跟踪过的文件暂存起来然后提交

    NOTE:这里仅仅是省略了git add这个命令而已,文件实际上还是先进入暂存区,再进行提交的,链接中的翻译有歧义.对文件使用该命令时,一定要确保该文件是已跟踪状态

  • 移除文件

    • 从暂存区移除

    移除命令

    git rm
    

    同时删除处于跟踪状态和工作区中的文件

    注意:如果只是手动的删除目录下的文件,这时候后虽然文件不存在,但是文件跟踪状态清单中还记录着该文件名称,那么此时查看状态时,将会提示Changes not staged for commit文件被修改但未暂存.如果一不小心手动删除了,那么可以执行该命令,移除清单中该文件的跟踪状态即可

    git rm --cached filename
    

    删除处于跟踪状态的文件,保留工作区中的文件

    git rm -f
    

    当某个文件提交到暂存区后,再次被修改时,使用git rm命令删除将会报错,使用强制删除命令方可删除,该命令会从工作区和暂存区中同时删除文件. 为了避免误删的特殊指令

    使用场景:当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用

    图片演示

    这里写图片描述

  • 移动文件(实际是文件改名)

    移动文件命令

    git mv oldfile newfile  
    
  • 忽略文件

    仓库中总有一些文件不需要git去跟踪,那么这个时候我们就需要去忽略文件–创建.gitignore文件,配置忽略文件的规则.Android Studio在创建项目的时候会自动生成此文件,该文件存在时,git会自动根据该文件内的规则进行文件忽略.

    • .gitignore的格式规范

      • 所有空行或者以开头的行都会被 Git 忽略。可以用来做注释符
      • 可以使用标准的 glob 模式匹配
      • 匹配模式可以以(/)开头防止递归
      • 匹配模式可以以(/)结尾指定目录
      • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
    • glob 模式是指 shell 所使用的简化了的正则表达式

      • 星号(*)匹配零个或多个任意字符
      • [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c)
      • 问号(?)只匹配一个任意字符
      • 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
      • 使用两个星号() 表示匹配任意中间目录,比如a/*/z 可以匹配 a/z, a/b/z 或 a/b/c/z等

    GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表传送门

    Android .gitignore

    # Built application files
    *.apk
    *.ap_
    
    # Files for the ART/Dalvik VM
    *.dex
    
    # Java class files
    *.class
    
    # Generated files
    bin/
    gen/
    out/
    
    # Gradle files
    .gradle/
    build/
    
    # Local configuration file (sdk path, etc)
    local.properties
    
    # Proguard folder generated by Eclipse
    proguard/
    
    # Log Files
    *.log
    
    # Android Studio Navigation editor temp files
    .navigation/
    
    # Android Studio captures folder
    captures/
    
    # Intellij
    *.iml
    .idea/workspace.xml
    .idea/tasks.xml
    .idea/libraries
    
    # Keystore files
    *.jks
    
    # External native build folder generated in Android Studio 2.2 and later
    .externalNativeBuild
    
查看日志

查看日志命令

git log

日志内容非常的庞大,git提供了很多的指令去筛选日志的内容,详细指令

个人常用的自定义格式指令

git log --pretty=format:"%h - %an, %ar : %s" --graph

git log --pretty="%h - %ar - %s" --author=pan --since=2.month
撤销操作

撤销命令

git commit --amend

修改提交信息:当暂存区的文件在工作区中并未修改,那么使用此指令将只是修改了提交的信息而已,该命令后面同样可以添加-m "提交信息"来直接附加提交信息

git commit -m 'initial commit'
git add forgotten_file
git commit --amend

覆盖最近一次的操作:添加忘记的文件,执行此命令后,会覆盖最近一次的操作

取消暂存的文件

取消暂存文件的命令

git reset HEAD <file>
撤消对文件的修改

撤消对文件的修改指令

git checkout -- [file]

未提交到暂存区的文件进行撤销修改操作

作者:a254830856 发表于2016/11/25 22:20:13 原文链接
阅读:24 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles