Git常用命令
git 是我们日常工作中使用频率极高的工具,各种指令让人眼花缭乱,今天,我们就在这里总结一下它的一些基本指令。
init 初始化版本库
初始化项目所在目录,初始化后会在当前目录下出现一个名为 .git
的目录
git init
clone 克隆仓库
将存储库克隆到新创建的目录中,为克隆的存储库中的每个分支创建远程跟踪分支
# -b 指定要克隆的分支,默认是master分支; 本地目录默认在当前目录
git clone <远程仓库的网址> [-b <分支名称>] [<本地目录>]
add 添加文件到暂存区
在 git 中,文件的修改需要先添加到暂存区,然后才能提交到版本库。git add 命令用于将文件的修改添加到暂存区。
# 把指定的文件添加到暂存区中
git add <文件路径>
# 添加所有修改、已删除的文件到暂存区中。省略 <文件路径> 即为当前目录
git add -u [<文件路径>]
git add --update [<文件路径>]
# 添加所有修改、已删除、新增的文件到暂存区中
git add -A [<文件路径>]
git add --all [<文件路径>]
git add .
commit 提交暂存区的修改
git commit 命令用于将暂存区的修改提交到本地仓库
# 把暂存区中的文件提交到本地仓库,进入编辑器输入该次提交的描述信息
git commit
# 把暂存区中的文件提交到本地仓库,并添加描述信息
git commit -m "<message>"
# 把所有修改、已删除的文件提交到本地仓库中
# 不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"
git commit -a -m "<message>"
# 修改上次提交的描述信息
git commit --amend
提示
为提高代码提交信息的可读性、协作效率和版本管理质量,你应该尽可能遵循 commit 提交规范 。
remote 管理 Git 仓库中的远程仓库
git remote 命令提供了一些用于查看、添加、重命名和删除远程仓库的功能
# 列出当前仓库中已配置的远程仓库
git remote
# 列出当前仓库中已配置的远程仓库,并显示它们的 URL
git remote -v
# 添加一个新的远程仓库。指定一个远程仓库的名称和URL,将其添加到当前仓库中。
git remote add <remote_name> <remote_url>
# 远程仓库重命名
git remote rename <old_name> <new_name>
# 删除指定的远程仓库
git remote remove <remote_name>
# 修改指定远程仓库的URL
git remote set-url <remote_name> <new_url>
# 显示指定远程仓库的详细信息,包括 URL和跟踪分支
git remote show <remote_name>
fetch 从远程获取代码库
从远程仓库获取最新的版本到本地的 tmp 分支上。
# 将远程仓库所有分支的最新版本全部取回到本地
git fetch <远程主机名>
# 将远程仓库指定分支的最新版本取回到本地
git fetch <远程主机名> <分支名>
pull 从远程更新仓库的本地版本
从远程仓库获取最新版本并合并到本地。 首先会执行 git fetch
,然后执行 git merge
,把获取的分支的 HEAD 合并到当前分支。
- 如果当前分支只有一个追踪分支,那么主机名都可以省略。
- 如果远程分支是与当前分支合并,则冒号后面的部分可以省略
- 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略
git pull [<远程主机名>] [<远程分支名>:<本地分支名>]
push
把本地仓库的提交推送到远程仓库
- 如果当前分支只有一个追踪分支,那么主机名都可以省略。
- 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
# 把本地仓库的分支推送到远程仓库的指定分支
git push [<远程主机名>] [<本地分支名>:<远程分支名>]
# 删除指定的远程仓库的分支
git push <远程主机名> :<远程分支名>
git push <远程主机名> --delete <远程分支名>
reset 还原提交记录
mixed
: 此为默认方式,将撤回的代码,存放到工作区。同时会保留本地未提交的内容。soft
: 回退到某个版本,将撤回的代码,存放到暂存区。同时会保留本地未提交的内容。hard
: 彻底回退到某个版本,丢弃将撤回的代码,本地没有commit的修改会被全部擦掉。
# 没有指定 commit ID 则默认为当前 HEAD
# option 默认为--mixed
git reset [--soft | --mixed | --hard] [HEAD] [<文件路径>]
revert 撤销某次提交
生成一个新的提交来撤销某次提交
git revert <commit ID>
status 查看仓库当前状态
用于显示工作目录和暂存区的状态
git status
branch 分支命令
# 列出本地的所有分支,当前所在分支以 "*" 标出
git branch
# 查看远程仓库的分支信息
git branch -r
# 同时查看本地和远程仓库的分支信息
git branch -a
# 列出本地的所有分支并显示最后一次提交,当前所在分支以 "*" 标出
git branch -v
# 创建新分支,新的分支基于上一次提交建立
git branch <分支名>
# 修改分支名
# 如果不指定原分支名称则为当前所在分支
git branch -m [<原分支名称>] <新的分支名称>
# 强制修改分支名称
git branch -M [<原分支名称>] <新的分支名称>
# 删除分支
# 删除指定的本地分支
git branch -d <分支名称>
# 强制删除指定的本地分支
git branch -D <分支名称>
checkout 切换分支、恢复工作区文件...
这是一个历史悠久的命令,从 Git 早期就已经存在。它功能丰富,既可以用于切换分支,也能用于恢复工作区文件、检出文件到暂存区等多种操作。
# 切换到已存在的指定分支
git checkout <分支名称>
# 创建并切换到指定的分支,保留所有的提交记录
# 等同于 "git branch" 和 "git checkout" 两个命令合并
git checkout -b <分支名称>
# 创建并切换到指定的分支,删除所有的提交记录
git checkout --orphan <分支名称>
# 替换掉本地的改动,新增的文件和已经添加到暂存区的内容不受影响
git checkout HEAD <文件路径>
提示
git checkout
是 git 最常用的命令之一,同时也是一个很危险的命令
switch 切换分支
git 2.23
版本中被引入,设计目的是专门处理分支切换操作,让分支切换的操作更加清晰和直观,避免 git checkout
命令因功能过多而带来的混淆。
# 切换到已存在的指定分支
git switch <分支名称>
# 创建并切换到指定的分支
git switch -c <分支名称>
# 丢弃工作区的未提交更改并切换分支
git switch --discard-changes <分支名称>
# 尝试将工作区的更改合并到目标分支后再切换
git switch --merge <分支名称>
git tag 标签
# 打印所有的标签
git tag
# 添加轻量标签,指向提交对象的引用,可以指定之前的提交记录
git tag <标签名称> [<commit ID>]
# 添加带有描述信息的附注标签,可以指定之前的提交记录
git tag -a <标签名称> -m <标签描述信息> [<commit ID>]
# 切换到指定的标签
git checkout <标签名称>
# 查看标签的信息
git show <标签名称>
# 删除指定的标签
git tag -d <标签名称>
# 将指定的标签提交到远程仓库
git push <远程主机名> <标签名称>
# 将本地所有的标签全部提交到远程仓库
git push <远程主机名> –tags
diff 显示更改
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
# 比较当前文件和暂存区中文件的差异,显示没有暂存起来的更改
git diff
# 比较暂存区中的文件和上次提交时的差异
git diff --cached
git diff --staged
# 比较当前文件和上次提交时的差异
git diff HEAD
# 查看从指定的版本之后改动的内容
git diff <commit ID>
# 比较两个分支之间的差异
git diff <分支名称> <分支名称>
# 查看两个分支分开后各自的改动内容
git diff <分支名称>...<分支名称>
log 查看提交历史
# 打印所有的提交记录
git log
# 打印从第一次提交到指定的提交的记录
git log <commit ID>
# 打印指定数量的最新提交的记录
git log -<num>
merge 合并分支
# 把指定的分支合并到当前所在的分支下,并自动进行新的提交
git merge <分支名称>
mv 重命名文件或者文件夹。
# 重命名指定的文件或者文件夹
git mv <源文件/文件夹> <目标文件/文件夹>
rm 删除文件或者文件夹。
# 将文件从暂存区和工作区中删除
git rm <file>
# 如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中
# 换句话说,仅是从跟踪清单中删除,使用 `--cached` 选项即可
git rm --cached
config 配置
local
: 仓库级global
: 全局级system
: 系统级
# 查看配置信息
git config <--local | --global | --system> -l
# 查看当前生效的配置信息
git config -l
# 编辑配置文件
git config <--local | --global | --system> -e
# 添加配置项
git config <--local | --global | --system> --add <name> <value>
# 获取配置项
git config <--local | --global | --system> --get <name>
# 删除配置项
git config <--local | --global | --system> --unset <name>
# 配置提交记录中的用户信息
git config --global user.name <用户名>
git config --global user.email <邮箱地址>
# 更改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
git配置文件位置
- 仓库级:
.git/.gitconfig
- 全局级:
$HOME/.gitconfig
- 系统级:
安装目录/etc/.gitconfig