Git命令介绍
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
转载自:https://juejin.cn/post/7234350128689545273