# 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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
3
4
5
6
# 12. 忽略规则
# 以 https://github.com/github/gitignore 为模板,编写.gitignore文件
> .* # 忽略.开头文件,即“不可提交”
> !.gitignore # 忽略排除,即“可提交”
1
2
3
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
2
3
4
5
6
7
8