08 Git 命令汇总

本文详细介绍了 Git 的各种常用命令,包括配置、初始化、添加、克隆、状态检查、差异比较、提交、回滚、分支管理、合并、解决冲突、标签管理、拉取和推送操作。通过实例演示了如何使用这些命令,帮助开发者更好地理解和运用 Git 进行版本控制。
摘要由CSDN通过智能技术生成

Git 常见命令汇总


1> git config


1.1 配置用户名和密码

  • 当安装 Git 后首先要做的事情是设置用户名称和 e-mail 地址。这是非常重要的,因为每次 Git 提交都会使用该信息。它被永远的嵌入到了你的提交中:
$ git config --global user.name "userName" 
$ git config --global user.email "email@Example.email"

读取时,默认情况下从系统,全局和存储库本地配置文件读取这些值,而选项–system,–global,–local 和–file 可用于告知命令从只有那个位置设置和读取。

  • 当不希望全局都使用 name,email 时可以去掉–global
$ git config user.name "userName" 
$ git config user.email "email@Example.email"

1.2 配置编辑器

  • 可以配置默认的文本编辑器,Git 在需要你输入一些消息时会使用该文本编辑器。如果想使用一个不同的文本编辑器,例如:VIM,可以按照如下操作:
$ git config --global core.editor vim

1.3 配置比较工具

  • 配置 diff 工具用来解决合并时的冲突。vimdiff
$ git config --global merge.tool vimdiff

1.4 检查配置

  • 如果想检查你的设置,可以使用 git config --list 命令来列出 Git 可以在该处找到的所有的设置:
$ git config --list

1.5 添加/删除配置项

添加配置项

  • 参数:–add
  • 格式:git config [–local|–global|–system] –add section.key value
$ git config --add site.name _Name

删除配置项

  • 参数:–unset
  • 格式:git config [–local|–global|–system] –unset section.key
$ git config --local -–unset site.name 

1.6 获取帮助

  • 如果在使用 Git 时需要帮助,有三种方法可以获得任何 git 命令的手册页(manpage)帮助信息
$ git help <verb> 
$ git <verb> --help 
$ man git-<verb>

例如,有关 git config 如何使用

$ git help config
  • 会跳转到相关 verb 的 manpage 手册

2> git help

git help [-a|--all] [-g|--guide] 
         [-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]
  • 没有选项,没有给出任何命令或指导,git 命令的概要和最常用的 Git 命令的列表打印在标准输出上。
  • 如果给出–all 或-a 选项,则所有可用的命令都将打印在标准输出上。
  • 如果给出了–guide 或-g 选项,那么在标准输出中也会列出有用的 Git 指南。
  • 如果给出了命令或指南,则会提出该命令或指南的手册页。该程序默认用于此目的,但这可以被其他选项或配置变量覆盖。

注意,git --help …与 git help 相同,因为前者被内部转换为后者。

  • 要显示 git 手册页,请使用命令:git help git。

3> git init

  • git init 命令创建一个空的 Git 仓库或重新初始化一个现有仓库。
$ cd /path/to/my/codebase 
$ git init #(1) 
$ git add . #(2) 
$ git commit . -m "a commit message" #(3)

(1). 创建一个/path/to/my/codebase/.git 目录。
(2). 将所有现有文件添加到索引。

(3). 将原始状态记录为历史的第一个提交。


4> git add

  • git add 命令将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。

基本用法:

git add <path>
  • 通常是通过 git add 的形式把 添加到索引库中, 可以是文件也可以是目录。
$ git add . # 将所有修改添加到暂存区 
$ git add * # Ant 风格添加修改 
$ 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 -u [ ]

  • 中所有跟踪文件中被修改过或已删除文件的信息添加到索引库。它不会处理那些不被跟踪的文件。省略 表示 . ,即当前目录。

git add -A [ ]

  • 表示把中所有跟踪文件中被修改过或已删除文件和所有未跟踪的文件信息添加到索引库。省略 表示 . ,即当前目录。

git add -i [ ] 打开暂存区索引

  • 可以通过 git add -i [ ]命令查看中被所有修改过或已删除文件但没有提交的文件,并通过其 revert 子命令可以查看 中所有未跟踪的文件,同时进入一个子命令系统。

在这里插入图片描述

* t.txt 和 t2.txt 表示已经被执行了 git add,待提交。即已经添加到索引库中。
* readme.txt 表示已经处于 tracked 下,它被修改了,但是还没有执行 git add。即还没添加到索引库中。

5> git clone

git clone 命令将存储库克隆到新目录中。

  • 将存储库克隆到新创建的目录中,为克隆的存储库中的每个分支创建远程跟踪分支(使用git branch -r可见),并从克隆检出的存储库作为当前活动分支的初始分支。
  • 在克隆之后,没有参数的普通 git 提取将更新所有远程跟踪分支,并且没有参数的git pull将另外将远程主分支合并到当前主分支(如果有的话)。
  • 此默认配置通过在refs/remotes/origin下创建对远程分支头的引用,并通过初始化remote.origin.url 和 remote.origin.fetch配置变量来实现

执行远程克隆

$ git clone <版本库的网址>
  • 该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
$ git clone <版本库的网址> <本地目录名> 
# 支持多种格式
$ git clone http[s]://example.com/path/to/repo.git 
$ git clone http://git.oschina.net/yiibai/sample.git 
$ git clone ssh://example.com/path/to/repo.git 
$ git clone git://example.com/path/to/repo.git 
$ git clone /opt/git/project.git  
$ git clone file:///opt/git/project.git 
$ git clone ftp[s]://example.com/path/to/repo.git 
$ git clone rsync://example.com/path/to/repo.git
  • 通常来说,Git 协议下载速度最快,SSH 协议用于需要用户认证的场合。

常见应用场景示例

  1. 从上游克隆下来:
$ git clone git://git.kernel.org/pub/scm/.../linux.git mydir 
$ cd mydir 
$ make # 执行代码或其它命令
  1. 在当前目录中使用克隆,而无需检出:
$ git clone -l -s -n . ../copy 
$ cd ../copy 
$ git show-branch
  1. 从现有本地目录借用从上游克隆:
$ git clone --reference /git/linux.git git://git.kernel.org/pub/scm/.../linux.git mydir 
$ cd mydir
  1. 创建一个裸存储库以将您的更改发布给公众:
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git

6> git status

  • git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。
  • git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log.
git status [<options>…​] [--] [<pathspec>…​]
  • 在每次执行git commit之前先使用git status检查文件状态是一个很好的习惯, 这样能防止你不小心提交了您不想提交的东西。
  • 通过git status -uno可以只列出所有已经被 git 管理的且被修改但没提交的文件。

6.1 status 描述

  • 显示索引文件和当前 HEAD 提交之间的差异,在工作树和索引文件之间有差异的路径以及工作树中没有被 Git 跟踪的路径。
  • 第一个是通过运行 git commit 来提交的;
  • 第二个和第三个是你可以通过在运行 git commit 之前运行 git add 来提交的。

git status 相对来说是一个简单的命令,它简单的展示状态信息。输出的内容分为 3 个分类/组。

在这里插入图片描述


6.2 忽略文件(untracked 文件)

  • 没有 tracked 的文件分为两类. 一是已经被放在工作目录下但是还没有执行 git add 的, 另一类是一些编译了的程序文件(如.pyc, .obj, .exe 等)。当这些不想 add 的文件一多起来, git status 的输出简直没法看, 一大堆的状态信息怎么看?
  • 可以通过<vim .gitignore>创建一个 gitignore 文件。
  • 基于这个原因。Git 让我们能在一个特殊的文件.gitignore 中把要忽略的文件放在其中, 每一个想忽略的文件应该独占一行, 这个符号可以作为通配符使用。例如在项目根目录下的*.gitignore**文件中加入下面内容能阻止.pyc 和.tmp 文件出现在 git status 中:
*.pyc
*.tmp

7> git diff

  • git diff命令用于显示提交和工作树等之间的更改。此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
  • 在工作树和索引或树之间显示更改,索引和树之间的更改,两个树之间的更改,两个对象之间的更改或两个文件在磁盘上的更改。

示例

$ git diff <file> # 比较当前文件和暂存区文件差异 
$ git diff git diff <id1><id1><id2> # 比较两次提交之间的差异 $ git diff <branch1> <branch2> # 在两个分支之间比较 
$ git diff --staged # 比较暂存区和版本库差异 
$ git diff --cached # 比较暂存区和版本库差异 
$ git diff --stat # 仅仅比较统计信息

检查工作树的几种方式

$ git diff #(1) 
$ git diff --cached #(2) 
$ git diff HEAD #(3)
  1. 工作树中的更改尚未分段进行下一次提交。
  2. 索引和最后一次提交之间的变化; 查看已经 git add,但没有 git commit 的改动。
  3. 自上次提交以来工作树中的更改;如果运行“git commit -a”,查看将会提交什么。

7.1 查看尚未暂存的文件更新了哪些部分

$ git diff
  • 此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
  • 也就是修改之后还没有暂存起来的变化内容。

7.2 查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异

显示的是下一次提交时会提交到 HEAD 的内容(不带-a 情况下)

$ git diff --cached
$ git diff --staged

显示工作版本(Working tree)和 HEAD 的差别

$ git diff HEAD

7.3 直接将两个分支上最新的提交做 diff

输出自topicmaster分别开发以来,master分支上的变更

$ git diff topic master #或  
$ git diff topic..master

显示当前分支与另一个 branch 的区别

$ git diff <branch>

比较上次提交和上上次提交

$ git diff HEAD^ HEAD

比较两个历史版本的差异

$ git diff SHA1 SHA2
  • 提示:SHA1,SHA2 是类似 COMMIT ID 的 32 位长度的值。

显示当前目录下的 lib 目录和上次提交之间的差别(更准确的说是在当前分支下)

$ git diff HEAD -- ./lib

8> git commit

  • git commit 命令将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。

要添加的内容可以通过以下几种方式指定:

    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值