# Git命令详解

# 1. 基本概念

# git仅能跟踪(记录)文本(网页、代码)文件的内容变化,视频、图片、压缩包等二进制文件(Word、PDF)的内容改变是无法详细知道的

# 工作区:workspace
# 暂存区:stage/index
# 本地库:repository
# 远程库:remote/origin

# origin:远程库的默认代称
# master:主分支的默认名

# HEAD:最新版
# HEAD^:上一版本
# HEAD^^:上上版本
1
2
3
4
5
6
7
8
9
10
11
12
13

# 1.1 git 基本使用


$ git clone 版本库地址	[本地文件夹名称]   注解:克隆远程仓库到本地
$ git init 初始化本地仓库
$ git add 添加到暂存区
$ git status 查看git此时提交
$ git commit -m '第一次提交代码' 提交到本地仓库 
$ git commit 弹出窗口,i 状态标记,q 状态取消编辑,:wq 保存退出
$ git log 查看提交记录
$ git reset --hard HEAD^ 回退到上一个版本,几个 ^ 表示回退几步
$ git reflog 操作记录
$ git reset --hard 6位版本号 退到指定版本

1
2
3
4
5
6
7
8
9
10
11
12

# 1.2 git 远程仓库


$ git remote add origin 仓库链接 连接远程仓库,origin为远程仓库的别名
$ git push origin master 往远程仓库推送代码 
$ git pull 拉取并合并代码

1
2
3
4
5

# 1.3 多人协作

$ git branch -a 查看所有的分支
$ git checkout -b dev 创建分支 dev ,并切换到 dev 分支
$ git checkout dev 切换到 dev 分支
$ git push origin dev 推送 dev 分支到远程仓库 dev 分支
$ git push origin master:dev 推送 master 到远程的 dev 分支
$ git branch -d dev  删除一个分支
$ git merge dev dev 分支合并到当前分支上

1
2
3
4
5
6
7
8

# 2. 状态、日志

$ git status # 查看变更历史(文件状态)

$ git log # 查看提交历史(按时间线降序排列)
$ git log --graph # 图形化显示提交记录
$ git log --pretty=oneline # 单行显示提交记录
$ git log --abbrev-commit # 简写记录号
$ git log --graph --pretty=oneline --abbrev-commit # 常用格式,建议用命令别名

$ git reflog # 查看当前分支的提交记录
1
2
3
4
5
6
7
8
9

# 3. 仓库关联

$ git init # 当前路径下构建本地仓库

$ git remote add origin https.. # 关联远程仓库,代称默认origin
$ git remote add 远程仓库 https.. # 关联远程仓库,并指定代称
$ git remote rm origin # 删除与远程仓库的关联

$ git remote # 查看远程仓库列表
$ git remote -v # 查看远程仓库列表详情
$ git remote show 远程仓库 # 查看远程仓库详情和最后的提交记录
1
2
3
4
5
6
7
8
9

# 4. 入库流程

  • 工作区 ⇨ 暂存区 ⇨ 本地仓库 ⇨ 远程仓库
# 工作区 ⇨ 暂存区
$ git add 文件 # 从工作区添加单个到暂存区
$ git add -f 文件 # 强制从工作区添加到暂存区
$ git add 文件1 文件2 # 从工作区添加多个文件到暂存区
$ git add 文件夹 # 从工作区添加文件夹(包含子目录)到暂存区
$ git add . # 从工作区添加当前目录下所有文件(包含子目录)到暂存区

# 暂存区 ⇨ 本地仓库
$ git commit -m "备注" # 从暂存区提交到本地仓库
$ git commit 文件1 文件2 -m "备注" # 从暂存区提交指定文件到本地仓库

# 工作区 ⇨ 本地仓库
$ git commit -a -m "备注" # 将工作区(已跟踪)文件的修改直接提交到本地仓库

# 本地仓库 ⇨ 远程仓库
$ git push origin master # 推送本地仓库的主分支到远程
$ git push -u origin master # 推送本地仓库到远程,并关联主分支master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 5. 撤销流程

  • 工作区 ⇦ 暂存区 ⇦ 本地仓库 ⇦ 远程仓库
# 工作区 ⇦ 暂存区
$ git checkout 文件 # 从暂存区恢复指定文件(暂存区不变)
$ git checkout . # 从暂存区恢复所有文件(暂存区不变)
$ git reset # 重置暂存区(工作区不变)
$ git reset --hard # 重置暂存区并恢复工作区(都变)

# 暂存区 ⇦ 本地仓库
$ git reset 记录号 # 重置暂存区到指定记录(工作区不变)

# 工作区 ⇦ 本地仓库
$ git checkout 记录号 文件 # 撤销本地仓库指定版本到工作区(和暂存区)
$ git reset --hard 记录号 # 重置暂存区并恢复工作区到指定记录(都变)
$ git reset --hard HEAD # 重置暂存区并恢复工作区到最新记录
$ git reset --hard HEAD^ # 重置暂存区并恢复工作区到上一记录
$ git reset --hard HEAD^^ # 重置暂存区并恢复工作区到上上记录
$ git reset --hard HEAD~n # 重置暂存区并恢复工作区到上n记录

# 工作区 ⇦ 本地仓库 ⇦ 远程仓库
$ git pull # 拉取远程仓库下当前分支的变更
$ git rebase # 变基拉取远程仓库下当前分支的变更

# 工作区 ⇦ 远程仓库
$ git clone https.. # 检出远程仓库的主分支master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 6. 改名、删除、替换

# 工作区 ⇨ 暂存区
$ git mv 文件名1 文件名2 # 改名工作区文件,并添加暂存区
$ git rm 文件 # 删除工作区文件,并添加暂存区

# 工作区 ✗ 暂存区↺
$ git rm --cached 文件 # 删除文件跟踪(保留工作区文件)

# 暂存区 ⇨ 本地仓库
$ git revert 记录号 # 提交并替换指定版本
$ git commit --amend -m "备注" # 补充提交并修改上次备注
$ git commit --amend 文件1 文件2 # 补充提交指定文件并沿用上次备注
1
2
3
4
5
6
7
8
9
10
11

# 7. 差异比较

# 工作区 & 暂存区
$ git diff # 查看暂存区与工作区的差异

# 暂存区 & 本地仓库
$ git diff --cached 文件 # 查看暂存区与本地仓库的差异

# 工作区 & 本地仓库
$ git diff HEAD # 查看当前分支下工作区与本地仓库的差异

# 本地仓库
$ git blame 文件 # 追溯指定文件的历史修改记录

$ git show 记录号 # 查看指定版本下的文件修改记录
$ git show 记录号:文件 # 查看指定版本下的文件修改内容
$ git show --name-only 记录号 # 查看指定版本下存在修改的文件列表

# 分支1 & 分支2
$ git diff 分支1 分支2 # 查看两个分支最新版本的差异
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 8. 分支管理

$ git branch # 查看本地分支列表
$ git branch 分支名 # 创建本地分支
$ git switch 分支名 # 切换本地分支
$ git switch -c 分支名 # 创建并切换本地分支
$ git branch -d 分支名 # 删除本地分支
$ git branch -D 分支名 # 强制删除本地分支

# 本地分支 ∽ 远程分支
$ git branch --set-upstream-to=origin/分支名 分支名 # 关联本地和远程分支

# 本地分支 ⇦ 远程分支
$ git checkout -b 分支 origin/分支 # 检出远程仓库的指定分支
$ git pull origin 分支 # 拉取远程仓库的指定分支到本地

# 本地分支 ⇨ 远程分支
$ git push origin 分支 # 推送本地仓库的指定分支到远程
$ git push origin --force # 强推当前分支到远程仓库
$ git push origin --all # 强推所有分支到远程仓库

# 当前分支 ⇦ 本地其他分支
$ git merge 分支 # 合并其他分支到当前分支
$ git merge --no-ff -m "备注" 分支 # 合并其他分支并保留分支
$ git cherry-pick 其他分支的提交记录号 # 将其他分支的提交合并到当前分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 9. 工作现场

$ git stash # 启用工作现场(隐藏工作区修改)
$ git stash list # 查看现场列表
$ git stash apply # 恢复工作现场
$ git stash drop # 删除工作现场
$ git stash pop # 恢复并删除工作现场
1
2
3
4
5

# 10. 版本标签

$ git tag # 查看标签列表
$ git show 标签号 # 查看标签详情
$ git tag 标签号 # 以当前版本创建标签
$ git tag 标签号 记录号 # 以指定版本创建标签
$ git tag -a 标签号 -m "建签备注" 记录号 # 以指定版本创建标签,并附加建签备注
$ git tag -d 标签号 # 删除指定标签
$ git push origin 标签号 # 推送指定标签到远程
$ git push origin --tags # 推送所有标签到远程

# 删除远程标签分2步
$ git tag -d 标签号 # 删除指定的本地标签
$ git push origin :refs/tags/标签号 # 删除指定的远程标签
1
2
3
4
5
6
7
8
9
10
11
12

# 11. 命令别名

$ git config --global alias.别名 '原命令符'

$ git config --global alias.unstage 'reset HEAD' # 简写暂存区的撤销命令为 git unstage
$ git config --global alias.logs "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" # 简写版本记录查看命令为 git logs

# 通过编辑.gitconfig的alias模块完成命令别名的删除
1
2
3
4
5
6

# 12. 忽略规则

# 以 https://github.com/github/gitignore 为模板,编写.gitignore文件
> .* # 忽略.开头文件,即“不可提交”
> !.gitignore # 忽略排除,即“可提交”
1
2
3

# 13. 配置文件

# 全局配置文件存储在 C:\Users\用户\.gitconfig
# 当前项目配置文件 .gitconfig

$ git config --global user.name "用户名" # 配置全局用户名
$ git config --global user.email "邮件地址" # 配置全局邮箱

$ git config --global core.quotepath false # 修复中文文件名显示乱码
# Git GUI Here → Edit → Options → Default File Contents Encoding: utf-8 设置文档默认编码
1
2
3
4
5
6
7
8

# 参考

  1. 《Git官方说明文档》 (opens new window)
  2. 《廖雪峰Git入门教程》 (opens new window)
  3. 《阮一峰Git 命令清单》 (opens new window)
  4. 《Git命令练习小游戏》 (opens new window)
Last Updated: 8/21/2023, 11:33:52 AM