likes
comments
collection
share

Git命令介绍

作者站长头像
站长
· 阅读数 4

1 配置Git

1.1 git config

--global 全局配置文件 ~/.gitconfig

--system 系统配置文件 /usr/local/git/etc/gitconfig

--local 项目仓库配置文件 项目路径/.git/config

--worktree 每个工作树配置文件,如未设置,默认等同于--local

# 用法
$ git config [<options>]

# 查看当前生效的配置信息,一般为所有配置文件的并集
$ git config -l
$ git config --list

# 查看配置文件
$ git config --<global |system | local> -l

# 编辑配置文件
$ git config --<global |system | local> -e$ git config --<global |system | local> --edit

# 添加配置项
$ git config --<global |system | local> --add name value

# 删除配置项
$ git config --<global |system | local> --unset name [value-regex]

# 替换配置项
$ git config --<global |system | local> --replace-all name value [value-regex]

# 获取配置项
$ git config --<global |system | local> --get name [value-regex]

# 重命名配置项的section
$ git config --<global |system | local> --rename-section old-name new-name

# 移除配置项的section
$ git config --<global |system | local> --remove-section name [value-regex]

1.2 常用配置

# 配置提交记录中的用户信息
$ git config --global user.name <用户名>
$ git config --global user.email <邮箱地址>

# 配置提交信息模版
$ git config --global commit.template <~/.文件名>

# 更改Git缓存区的大小
# 如果提交的内容较大,默认缓存较小,提交会失败
# 缓存大小单位:B,例如:524288000(500MB)
$ git config --global http.postBuffer <缓存大小>

# 调用 git status/git diff 命令时以高亮或彩色方式显示改动状态
$ git config --global color.ui true

# 配置可以缓存密码,默认缓存时间15分钟
$ git config --global credential.helper cache

# 配置密码的缓存时间
# 缓存时间单位:秒
$ git config --global credential.helper 'cache --timeout=<缓存时间>'

# 配置长期存储密码
$ git config --global credential.helper store

2 前期准备

2.1 git clone

克隆远程仓库

# 克隆远程仓库,默认是master分支
$ git clone <远程仓库地址>

# 克隆远程仓库,并指定本地仓库目录
$ git clone <远程仓库地址> <本地目录>

# 克隆远程仓库的指定分支,并指定本地仓库目录
$ git clone <远程仓库地址> -b <分支名> <本地目录>

2.2 git init

在当前目录新建仓库

$ git init [仓库名称]

2.3 git status

查看本地仓库的状态

# 查看所有文件状态
$ git status

# 查看指定文件状态
$ git status <文件名称>

2.4 git remote

操作远程仓库

# 查看本地存在的远程仓库
$ git remote 

# 查看本地存在的远程仓库,更详细信息$ git remote -v 
$ git remote --verbose

# 添加远程仓库,并指定主机名
$ git remote add <远程仓库主机名> <远程仓库地址>

# 删除指定的远程仓库
$ git remote remove <远程仓库主机名>

# 修改远程仓库的主机名
$ git remote rename <旧的远程仓库主机名> <新的远程仓库主机名># 修改远程仓库的URL
$ git remote set-url <远程仓库主机名> <新的远程仓库地址>

3 代码提交

3.1 git add

将工作区的改动提交到暂存区(stage)

# 将 指定文件 添加到暂存区
$ git add <文件路径>

# 将所有 修改和新增 的文件添加到暂存区,不包括 删除 的文件
$ git add .

# 将所有 修改和删除 的文件添加到暂存区,不包括 新增 的文件
$ git add -u .
$ git add -update .

# 将 所有改动的文件 添加到暂存区
$ git add -A .
$ git add --all .

3.2 git commit

将暂存区的文件提交到本地仓库

# 将 暂存区所有的文件 提交到本地仓库,调用文本编辑器输入该次提交的描述信息
$ git commit

# 将 暂存区所有的文件 提交到本地仓库
$ git commit -m <提交信息>

# 将 暂存区指定的文件 提交到本地仓库
$ git commit [文件1] [文件2] -m <提交信息>

# "git add" 命令添加的所有文件 提交到本地仓库
$ git commit -a

# 将 工作区的内容 直接提交到本地仓库
# 不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"
$ git commit -am <提交信息>

# 修改上次提交记录的描述信息
$ git commit --amend

3.3 git pull

拉取分支,获取远程仓库最新的版本,并合并到本地分支

git pull == git fetch + git merge

# 拉取远程服务器上的变更,并合并到你的工作目录
$ git pull [远程仓库的地址]

3.4 git push

推送分支,将本地分支的更新推送到远程仓库

# 将本地分支推送到指定远程主机名下的远程分支
$ git push <远程主机名> <本地分支名>:<远程分支名>
$ git push origin master:master

# 将本地分支推送到与之存在"追踪关系"的远程分支
# 省略远程分支名,如果该远程分支不存在,则会被新建
$ git push <远程主机名> <本地分支名>
$ git push origin master

# 如果当前分支与远程分支之间存在"追踪关系",则本地分支和远程分支都可以省略
$ git push <远程主机名>
$ git push origin

# 如果当前分支只有一个追踪分支,那么主机名都可以省略
$ git push

# 如果当前分支与多个远程主机存在"追踪关系",则可以使用 -u 指定一个默认主机,这样以后就可以不加任何参数使用git push
$ git push -u <远程主机名> <本地分支名>
$ git push -u origin master

# 删除指定远程主机名下的远程分支
# 省略本地分支名,等同于推送一个空的本地分支到远程分支
$ git push <远程主机名> :<远程分支名>
$ git push <远程主机名> --delete <远程分支名>

4 分支命令

4.1 git branch

操作分支,分支的增删改查操作

# 查看本地仓库的所有分支
$ git branch

# 查看远程仓库的所有分支
$ git branch -r

# 查看本地仓库和远程仓库的所有分支
$ git branch -a

# 创建新的本地分支,新分支基于上一次提交建立
$ git branch <分支名>

# 删除指定的本地分支
$ git branch -d <分支名>

# 强制删除指定的本地分支
$ git branch -D <分支名>

# 修改分支名,如果不指定原分支名,则默认为当前分支
$ git branch -m [原分支名] <新分支名>

# 强制修改当前分支名
$ git branch -M <新分支名>

4.2 git switch

切换分支

# 切换到已有分支
$ git switch <分支名>

# 创建并切换到新分支
$ git switch -c <分支名>

4.3 git checkout

检出分支,用于创建、切换分支

# 切换分支
$ git checkout <分支名>

# 创建并切换到新的分支,保留所有的提交记录
$ git checkout -b <分支名>

# 创建并切换到新的分支,删除所有的提交记录
$ git checkout --orphan <分支名>

# 替换掉本地的改动,新增的文件和已经添加到暂存区的内容不受影响
$ git checkout <文件路径>

4.4 git cherry-pick

遴选分支

# 将已经提交的记录合并到当前分支
$ git cherry-pick <commit-id>

4.5 get fetch

抓取分支,获取远程仓库最新的版本

# 抓取远程仓库所有分支的最新版本
$ git fetch [远程分支名]

# 抓取远程仓库指定分支的最新版本
$ git fetch <远程主机名> <远程分支名>

4.6 git merge

合并分支

# 将指定的分支合并到当前分支
$ git merge <分支名>

# 当合并分支后出现冲突,撤回合并分支
$ git merge --quit

5 标签命令

5.1 git tag

标签操作

# 查看所有标签
$ git tag 

# 给指定的提交添加标签,标签名默认为提交ID
$ git tag <提交ID>

# 添加轻量标签,可以指定之前的提交记录
$ git tag <标签名> [提交ID]

# 添加带有描述信息的附注标签,可以指定之前的提交记录
$ git tag -a <标签名> -m <标签描述信息> [提交ID]

# 删除指定标签
$ git tag -d <标签名>

5.2 其他标签命令

# 切换到指定的标签
$ git checkout <标签名>

# 查看标签的信息
$ git show <标签名>

# 将指定的本地标签提交到远程仓库
$ git push <远程主机名> <标签名>

# 将所有的本地标签全部提交到远程仓库
$ git push <远程主机名> –tags

6 其他命令

6.1 git log

查看提交日志。侧重于显示版本的提交历史

# 查看所有提交日志
$ git log

# 将所有日志缩写为单行显示
$ git log --pretty=oneline

# 查看最新 n 条提交日志
$ git log -n 

# 打印从第一次提交到指定的提交的日志
$ git log <提交ID>

# 查看分支合并情况
$ git log --graph --pretty=oneline --abbrev-commit 

# 查看分叉历史,包括:提交历史、各个分支的指向以及项目的分支分叉情况
$ git log --graph --oneline --decorate --all

6.2 git show

查看提交日志。侧重于显示版本差异,输出每个提交具体修改的内容

# 查看某次历史提交的完整日志
$ git show <提交ID>

# 查看某次历史提交的某个文件的日志
$ git show <提交ID>:<文件路径>

# 查看HEAD标签当前指向的提交的完整日志
$ git show HEAD

# 查看HEAD标签当前指向的提交的文件内容
$ git show HEAD:<文件路径>

# 查看分支最新一次提交的完整日志
$ git show <分支名>

# 查看分支最新一次提交的父提交的完整日志
$ git show <分支名^1>
$ git show <分支名~>

# 查看标签的详细信息
$ git show <标签名>

6.3 git diff

比较版本之间的差异

# 比较当前文件和暂存区中文件的差异,尚未添加到暂存区(stage)
$ git diff

# 比较暂存区(stage)中的文件和当前最新版本的差异
$ git diff --cached
$ git diff --staged

# 比较当前文件和当前最新版本的差异$ git diff HEAD

# 查看从指定的提交之后改动的内容
$ git diff <commit id>

# 显示两个分支之间的差异
$ git diff <分支1> <分支2>

# 查看两个分支各自改动的内容
$ git diff <分支1>...<分支2>

6.4 git rm

删除文件或文件夹

# 删除工作目录中的文件夹,并将删除动作添加到暂存区(stage)
$ git rm -r <文件夹路径>

# 删除工作目录中的文件,并将删除动作添加到暂存区(stage)
$ git rm <文件路径>

# 删除暂存区的文件
$ git rm --cached <文件路径>

# 删除工作目录中的文件,并删除所有暂存区的文件
$ git rm -rf .

6.5 git clean

删除未跟踪的文件

# 删除所有未跟踪的文件
# -d:包含目录,-f:强制
$ git clean -df

6.6 git stash

贮藏文件

# 贮藏当前的工作状态。只会贮藏那些已经被跟踪的文件(即那些已经被添加到版本控制中的文件)
$ git stash

# 临时保存所有修改的文件,message为备注信息
$ git stash save <message>

# 查看当前的贮藏列表
$ git stash list

# 应用最近的贮藏到工作目录(默认应用 stash@{0})
$ git stash apply

# 应用特定的贮藏,可以指定其在贮藏列表中的索引
$ git stash apply stash@{n}

# 弹出最近的贮藏并应用到工作目录(这将删除贮藏列表中相应的贮藏)
$ git stash pop

# 删除最新的贮藏
$ git stash drop

# 删除特定的贮藏,可以指定其索引
$ git stash drop stash@{n}

# 删除所有贮藏
$ git stash clear

# 贮藏包括未跟踪文件的工作状态
$ git stash -u
$ git stash --include-untracked

# 贮藏包括未跟踪文件和忽略文件的工作状态
$ git stash -a
$ git stash --all

6.7 git reset

还原提交记录

用法:git reset --{soft | mixed | hard} HEAD

HEAD^ 上一个版本,也可以写成HEAD1。撤回2次提交,可以使用HEAD^^或者HEAD2

--mixed 不删除工作空间改动代码,撤销commit,撤销git add .操作。默认参数

--soft 不删除工作空间改动代码,撤销commit,不撤销git add .操作

--hard 删除工作空间改动代码,撤销commit,撤销git add .操作,并恢复到上一次的提交状态

# 撤销最近一次的提交
$ git reset HEAD~
$ git reset --mixed HEAD~

# 重置暂存区,但可以保留文件的变更
# 相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件
$ git reset [文件路径]
$ git reset --mixed [文件路径]

# 改变 HEAD 指向,撤销到指定的提交记录,并在本地保留文件的变更
$ git reset <提交ID>
$ git reset --mixed <提交ID>

# 改变 HEAD 指向,撤销到指定的提交记录,并在本地保留文件的变更
# 相当于调用 "git reset --mixed" 命令后又做了一次 "git add"
$ git reset --soft <提交ID>

# 改变 HEAD 指向,撤销到指定的提交记录,并丢弃所有的历史记录
$ git reset --hard <提交ID>

6.8 git rebase

此命令执行后会弹出 vim 修改信息,修改第二行的pick为s,或者为squash,squash为合并的意思。然后保存退出编辑,会打开第二个 vim 编辑,合并并修改 commit 内容,保存退出会产生一个新的commit id,这样就合并了两个commit

# 合并前两个历史提交
$ git rebase -i HEAD~2