Git的进阶

    xiaoxiao2021-03-25  54

    安装Git

    Linux

    $ sudo yum install git

    或者

    $ sudo apt-get install git

    Mac

    直接在Terminal执行git命令, 如果没有会提示安装方法.

    如果喜欢安装程序的话, 点这里

    配置文件

    第一次安装, 千万别要忘了配置你的git的使用者名字和邮箱. 这个道理很简单, 每一次的提交时需要记录提交者的, 如果没有提交者, 那么bug出现找谁来背锅??

    查看config

    Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。

    /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。

    $ git config --system --list


    ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。

    $ git config --global --list


    当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。

    每一个级别覆盖上一级别的配置,所以.git/config的配置变量会覆盖/etc/gitconfig中的配置变量。


    当然, 也可以查看某一项配置信息.

    形式:git config [--global|--system] <key>

    查看最终的配置属性值 $ git config user.name

    查看当前系统的属性值 $ git config --global user.name


    设置用户信息

    $ git config --global user.name "name"

    $ git config --global user.email xxx@163.com

    使用--global选项, 当以后在该系统上做的任何操作都会使用此属性. 如果你需要在某一个特定的项目使用其他名字和邮箱, 那么可以通过设置项目中的config文件, 这样config中的属性会覆盖掉global的全局属性, 并且当在其他项目中并不会造成影响. 使用方式只需要去掉--global参数即可修改项目中的.git/config文件

    $ git config user.name "name"


    获取帮助手册

    形式: git help <verb> 或者 git <verb> --help

    比如查看config手册

    $ git help config

    Git别名

    例如: 生成别名之后可以在日后用简短的表示来使用

    $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status

    .gitignore文件

    对于自动生成的文件, 日志, 编译的临时文件等. 可以对其进行配置, 让git不追踪这些文件

    规范如下:

    所有空行或者以 # 开头的行都会被 Git 忽略。可以使用标准的 glob 模式匹配。匹配模式可以以(/)开头防止递归。匹配模式可以以(/)结尾指定目录。要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反

    glob模式是指shell所使用的简化了的正则表达式.

    * :匹配零个或多个任意字符[abc] :只匹配括号内的任意一个字符[0-9] :使用短划线表示范围, 可以匹配0到9之间的任何字符.? :匹配任意一个字符**:匹配任意的中间目录,例如a/**/z可以匹配a/z,a/b/z,a/b/c/z等

    如下给出一个样板:

    # 忽略所有以 .c结尾的文件 *.c # 但是 stream.c 会被git追踪 !stream.c # 只忽略当前文件夹下的TODO文件, 不包括其他文件夹下的TODO例如: subdir/TODO /TODO # 忽略所有在build文件夹下的文件 build/ # 忽略 doc/notes.txt, 但不包括多层下.txt例如: doc/server/arch.txt doc/*.txt # 忽略所有在doc目录下的.pdf文件 doc/**/*.pdf

    仓库的基础操作

    初始化仓库

    $ git init

    添加文件到暂存区

    # 添加全部暂存区和历史区不存在的或者有更改的 `.c`结尾的文件 $ git add *.c # 添加全部暂存区和历史区不存在的或者有更改的文件 $ git add . # 指定文件添加 $ git add test.c

    status仓库

    $ git status # 如果需要显示一种紧凑式格式 $ git status --short # 等价于 $ git status -s

    紧凑式中字母的表示含义如下:

    ?? :表示新添加的未追踪的文件M :M出现在右边,表示该文件被修改但是还没有放入暂存区M :M出现在左边,表示文件被修改已经放入了暂存区MM :出现两个,代表此文件在工作区修改已经放入了暂存区, 但之后有进行了修改,没有添加到暂存区

    diff仓库

    如果你想知道文件具体修改的内容, 那么diff会很有用

    # 查看以追踪但尚未暂存的文件更新了哪些部分, 不添加额外参数 $ git diff # 对使用了add添加到了暂存区的内容, 使用--staged参数或者--cached $ git diff --staged

    提交更新

    # 常规做法 $ git commit -m "commit message" # 如果不使用-m参数添加提交信息, git会使用默认的编译器如vi进行提交描述编写. # 可通过$ git config --global core.edit 设定喜欢的编译器 # 跳过暂存区操作, 直接从工作区提交到历史区 $ git commit -a -m "" #等价于: $ git commit -am ""

    移除文件

    如果在工作区间对一个文件进行删除, 需要先进行add,然后才可以提交. 使用git rm可以直接在工作区间删除文件, 并提交到暂存区.

    $ git rm fileName # 如果文件修改,并添加了暂存区, 需要使用-f参数来强制删除(force) $ git rm -f fileName # 可以使用glob模式,如下 $ git rm log/\*.log # 删除log目录下所有名称是.log结尾文件 $ git rm \*~ # 删除以~结尾的所有文件

    移动文件

    同样使用git rm会方便很多, 并且如果相对文件重命名也可以如此

    $ git mv file_from file_to

    当执行了这条语句之后, 只需要在下一次commit即可, 不需要考虑额外操作. 等价于如下:

    $ mv file_from file_to $ git rm file_from $ git rm file_to

    查看历史提交

    如果是最基本的git log, 那么会按提交时间列出所有更新, 包括提交的SHA-1校验和, 作者名称,邮箱,提交时间,提交说明. 下面说说常用选项.

    # -p:仅显示最近x次的提交 格式 $ git log -p -x $ git log -p -2 # 查看最近的两次提交内容 # --stat:简略的显示每次提交的内容更改, 如哪些文件变更,多少删除,多少添加等 $ git log --stat # --pretty: 指定默认不同格式展示信息 $ git log --pretty=oneline #每次提交用一行显示 $ git log --pretty=format:"%h - %an, %ar : %s" # 效果:1a99c42 - 苏, 19 hours ago : 无意义提交

    关于format对应的常用占位符的写法和意义

    选项说明%H提交对象(commit)的完整哈希字串%h提交对象的简短哈希字串%T树对象(tree)的完整哈希字串%t树对象的简短哈希字串%P父对象(parent)的完整哈希字串%p父对象的简短哈希字串%an作者(author)的名字
    转载请注明原文地址: https://ju.6miu.com/read-36838.html

    最新回复(0)