Git 常见的术语
git
:一个开源的、分布式的版本控制系统
commit
:提交,指一个 Git 对象,该对象是整个仓库以 SHA 表示的快照
branch
:分支,一个轻量的、可移动的指向一个 commit 的指针
clone
:克隆,指在本地创建一份远程仓库的副本
remote
:远程仓库,是指托管在 GitHub、GitLab 等地方的公共(或私有)仓库,团队所有成员均可向该仓库提交修改
fork
:创建一个其他用户的仓库的副本
pull request
:简称 PR,指针对某个仓库,请求别人拉取并合并你的修改。通常,发起 pull request 的人都是从被请求人那里 clone 代码
HEAD
:表示当前工作区,使用 git checkout命令,可以把 HEAD 指针切换到不同的分支、标签和 commit 上
创建命令 {#%E5%88%9B%E5%BB%BA%E5%91%BD%E4%BB%A4}
| Git 指令 | 命令说明 |
|-------------------|-------------------------|
| git clone <url>
| 克隆远程仓库 |
| git init
| 初始化本地 git 仓库(即创建新的本地仓库) |
本地更改 {#%E6%9C%AC%E5%9C%B0%E6%9B%B4%E6%94%B9}
| Git 指令 | 命令说明 |
|-------------------------------|--------------------------------------------|
| it status
| 查看当前分支状态 |
| git diff
| 查看已跟踪文件的变更 |
| git add <file>
| 将指定的文件添加到暂存区 |
| git add .
| 将所有有变更的文件添加到暂存区 |
| git commit -a
| 提交所有本地修改 |
| git commit -m "xxx"
| 把已添加至暂存区的文件执行提交,并以 xxx 作为本次提交的描述 |
| git commit --amend -m "xxx"
| 修改上一次提交(请勿用该命令修改已发布的提交) |
| git commit -am "xxx"
| 该命令是 git add . 和 git commit -m "xxx" 的快捷方式 |
| git stash
| 暂存当前修改,将所有置为 HEAD 状态 |
| git stash list
| 查看所有暂存列表 |
| git stash push
| 把当前工作区的文件暂存到临时空间 |
| git stash pop
| 把文件从临时空间中恢复到当前工作区 |
提交历史 {#%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2}
| Git 指令 | 命令说明 |
|---------------------|------------------------------------------------------------------------------------------|
| git log
| 查看提交日志 |
| git log -n
| 显示 n 行日志,n 为整数 |
| git log --stat
| 查看本地提交日志 |
| git show <commit>
| 查看提交日志及相关变动文件 |
| git show HEAD
| 查看 HEAD 提交日志 |
| git show HEAD^
| 查看 HEAD 的上一个版本提交日志。另外,git show HEAD^^ 是查看上 2 个版本的提交日志;git show HEAD^5 是查看上 5 个版本的提交日志 |
| git blame <file>
| 对于指定文件,逐行显示提交的哈希ID、提交者、提交日期以及修改的内容 |
| git whatchanged
| 显示提交历史,以及每次提交变更的文件 |
分支和标签 {#%E5%88%86%E6%94%AF%E5%92%8C%E6%A0%87%E7%AD%BE}
| Git 指令 | 命令说明 |
|-------------------------------------------|-----------------------------------------------------------|
| branch
| 查看本地分支 |
| git branch -r
| 查看远程分支 |
| git branch -a
| 查看所有分支(本地和远程) |
| git branch --merged
| 查看所有分支已合并到当前分支的分支 |
| git branch --no-merged
| 查看所有分支未合并到当前分支的分支 |
| git branch -m <new-branch>
| 把当前分支的名称改成 new-branch;如果 new-branch 已存在,将不会执行改名 |
| git branch -M <new-branch>
| 强制把当前分支的名称改成 new-branch(即使 new-branch 已存在) |
| git branch -m <old-branch> <new-branch>
| 把分支 old-branch 的名称改成 new-branch,如果 new-branch 已存在,将不会执行改名 |
| git branch -M <old-branch> <new-branch>
| 强制把分支 old-branch 的名称改成 new-branch(即使 new-branch 已存在) |
| git checkout <branch-name>
| 切换到 branch-name 分支 |
| git branch <new-branch>
| 新建分支(也可以用 git checkout -b <new-branch>) |
| git branch --track <new> <remote>
| 基于远程分支创建一个新分支,同 git checkout --track <remote/branch> |
| git branch -d <branch-name>
| 删除本地分支 |
| git tag
| 列出所有本地标签 |
| git tag <tag-name>
| 基于最新的提交创建标签 |
| git tag -d <tag-name>
| 删除标签 |
删除命令 {#%E5%88%A0%E9%99%A4%E5%91%BD%E4%BB%A4}
| Git 指令 | 命令说明 |
|--------------------------|-----------------|
| it rm <file>
| 删除文件(将从磁盘中删除文件) |
| git rm -r <directory>
| 递归删除指定目录下的文件 |
| git rm --cached <file>
| 停止跟踪文件,不会从磁盘中删除 |
合并和衍合 {#%E5%90%88%E5%B9%B6%E5%92%8C%E8%A1%8D%E5%90%88}
| Git 指令 | 命令说明 |
|--------------------------------------------------|---------------------------------------|
| it merge <branch>
| 合并指定分支到当前分支,保留两个 |
| git rebase <branch>
| 合并指定分支到当前分支,只保留一个 |
| git rebase --abort
| 终止 rebase 操作,即回到执行 rebase 之前的状态 |
| git rebase --continue
| 解决冲突后继续执行 rebase |
| git mergetool
| 使用配置文件指定的 mergetool 解决冲突 |
| git add <resolved-file> git rm <resolved-file>
| 使用编辑器手动解决文件冲突,并在冲突解决后,把文件标记为 resolved |
撤销命令 {#%E6%92%A4%E9%94%80%E5%91%BD%E4%BB%A4}
| Git 指令 | 命令说明 |
|------------------------------|--------------------------------------------|
| git reset --hard HEAD
| 将当前版本重置为 HEAD(用于 merge 失败的时候) |
| git reset <commit>
| 将当前版本重置为某一个提交状态,代码不变 |
| git reset --hard <commit>
| 强制将当前版本重置为某一个提交状态,并丢弃那个状态之后的所有修改(请谨慎使用该命令) |
| git reset --merge <commit>
| 将当前版本重置为某一个提交状态,并保留版本库中不同的文件 |
| git reset --keep <commit>
| 将当前版本重置为某一个提交状态,并保留未提交的本地修改 |
| git revert <commit>
| 撤销提交 |
| git restore <file>
| 丢弃指定文件的修改信息,即恢复到文件修改前的状态 |
| git checkout -- <file>
| 同 git restore <file> 命令 |
| git checkout HEAD <file>
| 对于指定文件,丢弃该文件的本地修改信息 |
| git clean
| 清除工作目录中未跟踪的文件 |
配置命令 {#%E9%85%8D%E7%BD%AE%E5%91%BD%E4%BB%A4}
| Git 指令 | 命令说明 |
|-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
| t clean -n
| 列出哪些文件将从工作目录中删除 |
| git config --list
| 列出当前 Git 配置 |
| git config --global user.name <name>
| 把参数 name 设置为当前用户使用的提交者的姓名;如果未指定 name 参数,则显示当前用户使用的提交者姓名 |
| git config --global user.email <email>
| 把参数 email 设置为当前用户使用的提交者的邮箱;如果未指定 email 参数,则显示当前用户使用的提交者邮箱 |
| git config --global alias.<alias> <command>
| 为 Git 命令创建全局的别名。比如,执行 alias.glog log --graph --oneline --decorate 命令后,git glog 就相当于 git log --graph --oneline --decorate。 |
| git config --system core.editor <editor>
| 对于本机的所有用户,设置命令使用的编辑器(比如 vim) |
| git config --global --edit
| 在编辑器中打开全局配置文件(用于手动修改) |
| git config --global color.ui auto
| 使用不同的颜色渲染 Git 命令的输出结果 |
其他命令 {#%E5%85%B6%E4%BB%96%E5%91%BD%E4%BB%A4}
| Git 指令 | 命令说明 |
|----------------------|---------------------------|
| var -l
| 列出 Git 环境变量 |
| git help <command>
| 显示指定命令的帮助(将呼出该命令的 man 文件) |