您现在的位置是:首页 >技术交流 >Git(六):基本命令(1):配置初始化与查看更改网站首页技术交流
Git(六):基本命令(1):配置初始化与查看更改
目录
1、config 配置
git config
命令用于获取并设置存储库或全局选项。这些变量可以控制 Git 的外观和操作的各个方面。
git config [<file-option>] [type] [--show-origin] [-z|--null] name [value [value_regex]]
git config [<file-option>] [type] --add name value
git config [<file-option>] [type] --replace-all name value [value_regex]
git config [<file-option>] [type] [--show-origin] [-z|--null]
--get name [value_regex]
git config [<file-option>] [type] [--show-origin] [-z|--null]
--get-all name [value_regex]
git config [<file-option>] [type] [--show-origin] [-z|--null] [--name-only]
--get-regexp name_regex [value_regex]
git config [<file-option>] [type] [-z|--null] --get-urlmatch name URL
git config [<file-option>] --unset name [value_regex]
git config [<file-option>] --unset-all name [value_regex]
git config [<file-option>] --rename-section old_name new_name
git config [<file-option>] --remove-section name
git config [<file-option>] [--show-origin] [-z|--null] [--name-only]
-l | --list
git config [<file-option>] --get-color name [default]
git config [<file-option>] --get-colorbool name [stdout-is-tty]
git config [<file-option>] -e | --edit
1.1 描述
-
查询 / 设置 / 替换 / 取消设置选项。该名称实际上是由点 (
.
) 分隔键,该值将被转义; -
--add
将多行添加到选项。更新或取消设置多行可能出现的选项,则需要给出 POSIX 正则表达式value_regex
; -
类型说明符可以是
--int
或--bool
,以使git config
确保变量是给定类型,或者--path
,它进行一些路径扩展。如果没有类型说明符,则不执行检查或转换; -
读取时,默认从系统,全局和存储库本地配置文件读取值,而选项
--system
,--global
,--local
和--file <filename>
可用于告知命令从只有那个位置设置和读取; -
写入时,默认将新值写入存储库本地配置文件,并且可以使用选项
--system
,--global
,--file <filename>
来告诉命令写入的位置( 默认值--local
); -
错误代码:
代码 含义 0 0 成功,非 0 失败 1 部分或键无效 2 没有提供部分或名称 3 配置文件无效 4 配置文件无法写入 5 尝试取消设置不存在的选项、尝试取消设置/设置多个行匹配的选项 6 尝试使用无效的正则表达式
1.2 存储位置
-
/etc/gitconfig
:包含了适用于系统所有用户和所有库的值,通过—system
读写; -
~/.gitconfig
:具体到你的用户,通过--global
读写; -
.git/config
:每个级别重写前一个级别的值。覆盖了在/etc/gitconfig
中的同一个值。
1.3 配置用户和密码
使得 Git 将总是会使用以下信息来处理在系统中所做的一切操作:
$ git config --global user.name "m"
$ git config --global user.email "y.com@gmail.com"
若希望在不同项目使用不同信息,则取消 --global 选项。
1.4 配置编辑器
缺省情况下,Git使用系统的缺省编辑器,通常可能是 vi
或者 vim
,若使用 emacs:
$ git config --global core.editor emacs
1.5 配置比较工具
缺省的比较工具用来解决合并时的冲突,如使用 vimdff:
$ git config --global merge.tool vimdiff
1.6 检查配置
列出Git可以在该处找到的所有的设置:
$ git config --list
# 查看特定值
$ git config user.name
$ git config user.email
1.7 添加 / 删除配置项
-
添加
-–add
:格式:
git config [–local|–global|–system] –add section.key value
$ git config -–add site.name y
-
删除
-–unset
:格式:
git config [–local|–global|–system] –unset section.key
$ git config --local -–unset site.name
1.8 获取帮助
获得任何 git 命令的手册页(manpage)帮助信息:
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
# 例
$ git help config
2、help 帮助
显示有关Git的帮助信息。
$ git help [-a|--all] [-g|--guide]
[-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]
2.1 描述
-
--all
/-a
:标准输出上打印所有可用的命令; -
--guide
/-g
:列出有用的 Git 指南; -
git --help ...
与git help
相同,前者被内部转换为后者; -
git help git
:显示 git 手册页。
所有这些配置变量应该使用
--global
标志设置,例如:$ git config --global help.format web $ git config --global web.browser firefox
3、init 初始化
创建一个空的 Git 仓库或重新初始化一个现有仓库。
$ git init [-q | --quiet] [--bare] [--template=<template_directory>]
[--separate-git-dir <git dir>]
[--shared[=<permissions>]] [directory]
3.1 描述
-
创建一个具有
objects
、refs/head
、refs/tags
和模板文件的.git
目录,还创建了引用主分支的HEAD
初始的一个HEAD
文件; -
如果通过
$GIT_OBJECT_DIRECTORY
环境变量指定了对象存储目录,那么将在下面创建sha1
目录,否则将使用默认的$GIT_DIR/objects
目录; -
现有存储库中运行
git init
命令是安全的。 它不会覆盖已经存在的东西。重新运行git init
的主要原因是拾取新添加的模板(--separate-git-dir
,移动存储库)。
4、add 添加
将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。
$ git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
[--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
[--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing]
[--chmod=(+|-)x] [--] [<pathspec>…]
4.1 描述
-
将提交的文件信息添加到索引库(修改添加到暂存区),准备为下一次提交分段;通过选项,可以用于添加内容,只对工作树文件进行更改,或删除其中不存在的路径;
-
多次执行,可将任何新的或修改的文件添加到索引;
-
默认情况下,
git add
不会添加忽略的文件,可以用-f(force)
选项添加被忽略的文件。
4.2 基本用法
- 通过
git add <path>
的形式把<path>
添加到索引库中,<path>
可以是文件也可以是目录:
$ git add <path>
-A :
将所有跟踪文件和所有未跟踪文件添加到索引库
-u :
将所有跟踪文件中添加到索引库
-i :
查看路径中被所有修改过或已删除文件但没有提交的文件,
并通过其 revert 子命令可以查看 <path> 中所有未跟踪的文件,同时进入一个子命令系统
-
.
: 将所有修改添加到暂存区; -
*
: Ant 风格添加修改; -
*Controller
: 将以 Controller 结尾的文件的所有修改添加到暂存区; -
Hello*
: 将所有以Hello开头的文件的修改添加到暂存区; -
Hello?
: 将以Hello开头后面只有一位的文件的修改提交到暂存区。
5、clone 克隆
将存储库克隆到新目录中。
$ git clone [--template=<template_directory>]
[-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
[-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
[--dissociate] [--separate-git-dir <git dir>]
[--depth <depth>] [--[no-]single-branch]
[--recurse-submodules] [--[no-]shallow-submodules]
[--jobs <n>] [--] <repository> [<directory>]
5.1 描述
-
将存储库克隆到新目录中,为克隆的存储库中的每个分支创建远程跟踪分支,并将存储库作为当前活动分支的初始分支:
git branch -r
可见远程分支 -
没有参数的
git pull
将会将远程主分支合并到当前主分支; -
默认配置通过在
refs/remotes/origin
下创建对远程分支头的引用,并通过初始化remote.origin.url
和remote.origin.fetch
配置变量来实现;
5.2 基本用法
$ git clone http[s]://example.com/repo.git
$ git clone http://git.oschina.net/sample.git
$ git clone ssh://repo.git
$ git clone git://repo.git
$ git clone /opt/project.git
$ git clone file://project.git
$ git clone ftp[s]://repo.git
$ git clone rsync://repo.git
$ git clone [user@]example.com:path/to/repo.git
通常来说,Git 协议下载速度最快,SSH 协议用于需要用户认证的场合。
- 在当前目录中使用克隆,而无需检出:
git clone -l -s -n . ../copy
- 创建一个裸存储库以将您的更改发布给公众:
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
6、status 状态
用于显示工作目录和暂存区的状态,不显示已经 commit
到项目历史中去的信息。
$ git status [<options>…] [--] [<pathspec>…]
6.1 描述
-
显示索引文件和当前HEAD提交之间的差异;
-
输出的内容分为3个分类 / 组:
# Changes to be committed: (已经在stage区, 等待添加到HEAD中的文件) # Changes not staged for commit: (有修改, 但是没有被添加到stage区的文件) # Untracked files:(没有tracked过的文件, 即从没有add过的文件)
-
通过
git status -uno
可以只列出所有已经被 git 管理的且被修改但没提交的文件:$ git status -uno
6.2 忽略文件
在一个特殊的文件 .gitignore
中把要忽略的文件放在其中, 每一个想忽略的文件应该独占一行, *
这个符号可以作为通配符使用。
# 路径
directoryName
# 文件
a.txt
*.exe
7、diff 更改
用于显示提交和工作树等之间的更改。此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>
7.1 描述
- 在工作树和索引或树之间显示更改,索引和树之间的更改,两个树之间的更改,两个blob 对象之间的更改或两个文件在磁盘上的更改。
git diff <file> # 比较当前文件和暂存区文件差异 git diff
git diff <id1><id1><id2> # 比较两次提交之间的差异
git diff <branch1> <branch2> # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异
git diff --cached # 比较暂存区和版本库差异
git diff --stat # 仅仅比较统计信息
7.2 基本用法
- 检查工作树:
$ git diff # 工作树中的更改尚未分段进行下一次提交
$ git diff --stat # 查看简单的 diff 结果
$ git diff --cached # 索引和最后一次提交之间的变化,以及 add 但没有 commit
$ git diff HEAD # 自上次提交以来工作树中的更改
- 直接将两个分支上最新的提交做 diff:
$ git diff topic master
$ #或
$ git diff topic..master
# master分支上的变更
$ git diff topic...master
# 查看当前目录和另外一个分支(test)的差别
$ git diff test
# 显示当前目录下的lib目录和上次提交之间的差别
$ git diff HEAD -- ./lib
- 查看 已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD) 的差异:
$ git diff --cached
$ git diff --staged
- 显示工作版本(Working tree)和HEAD的差别:
$ git diff HEAD
# 比较上次提交和上上次提交
$ git diff HEAD^ HEAD
- 比较两个历史版本之间的差异:
$ git diff SHA1 SHA2