您现在的位置是:首页 >技术交流 >Git(六):基本命令(1):配置初始化与查看更改网站首页技术交流

Git(六):基本命令(1):配置初始化与查看更改

belien 2023-06-01 04:00:02
简介Git(六):基本命令(1):配置初始化与查看更改

目录

1、config 配置

1.1 描述

1.2 存储位置

1.3 配置用户和密码

1.4 配置编辑器

1.5 配置比较工具

1.6 检查配置

1.7 添加 / 删除配置项

1.8 获取帮助

2、help 帮助

2.1 描述

3、init 初始化

3.1 描述

4、add 添加

4.1 描述

4.2 基本用法

5、clone 克隆

5.1 描述

5.2 基本用法

6、status 状态

6.1 描述

6.2 忽略文件

7、diff 更改

7.1 描述

7.2 基本用法

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);

  • 错误代码:

    代码含义
    00 成功,非 0 失败
    1部分或键无效
    2没有提供部分或名称
    3配置文件无效
    4配置文件无法写入
    5尝试取消设置不存在的选项、尝试取消设置/设置多个行匹配的选项
    6尝试使用无效的正则表达式

1.2 存储位置

  1. /etc/gitconfig :包含了适用于系统所有用户和所有库的值,通过 —system 读写;

  2. ~/.gitconfig :具体到你的用户,通过 --global 读写;

  3. .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 描述

  • 创建一个具有objectsrefs/headrefs/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.urlremote.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
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。