目录
一. Git 常识
- 早期源码工具: diff / patch
- 分布式数据库的版本管理系统
- 直接快照,而非比较差异 / 几乎所有操作都可本地执行 / 时刻保持数据完整性 / 多数操作仅添加数据
- Git 依赖于 4 类数据对象工作: :“blob” 、 “tree” 、 “commit” 和 “tag” 。
- blob: 是某个文件数据的快照,称为文件快照对象。 blob 仅仅存储被跟
踪文件不同版本的内容,并不记录文件的名字、权限等属性。 - tree: 即某个目录的快照。 tree 对象存储了对应目录所包含的子目录
tree 对象和文件 blob 对象的指纹字符串 ( 索引 ) 等信息。 - commit: 包含根目录 tree 对象的索引和其他提交信息元数据,用来标
记项目某一个特定时间点的状态。 - tag: 标签,是某个 blob/ tree/commit 对象的快捷名字。可以包含签
名,最常见的是指向 commit 的 GPG 签名的标签。
- blob: 是某个文件数据的快照,称为文件快照对象。 blob 仅仅存储被跟
- many stages,one commit
- git checkout (签出 / 检出)的用法:
- 目标如果是分支名称,此时实际上实现了分支切换。
- 目标如果是某个提交 id ,则此时得到一个“分离的头指针”,或者说是切换到了某
个匿名分支。
- 跟踪分支(tracking branch):在签出远程跟踪分支时自动创建的本地分支。此时,远程仓库中对应的分支,即为跟踪分支的上游分支。
二. 常用命令
git "使用的命令" -h
- 配置
git config --global user.email "你的邮箱" # 配置邮箱
git config --global user.name "你的用户名" # 配置用户名
git config --list # 查看配置
git remote add "设置远程仓库的命名"(origin) "远程仓库地址" # 添加远程仓库的配置
- 创建新仓库
git init
- 克隆现有仓库
git clone "远程仓库地址"
git clone "远程仓库地址" "重命名的名字"
git clone [ssh://]linus@github.com:/git/git.git # ssh 协议克隆
git clone git://github.com/git/git.git # git 协议克隆
- 分支
# 关联远程分支
git push --set-upstream [本地分支] origin/"远程分支名"
或
git push -u [本地分支] origin/"远程分支名"
git remote -v # 查看当前关联的所有远程仓库
git branch -d "本地分支名" # 删除本地分支
git push origin --delete "远程分支名" # 删除远程分支
git branch -vv # 查看本地分支与远程分支的映射关系
git branch --unset-upstream # 撤销本地分支与远程分支的关系
# 切换分支
git switch "分支名"
或
git checkout "分支名"
# 创建并切换分支
git switch -c "分支名"
等价于
git branch "分支名" + git switch "分支名"
git merge "分支名" # 合并指定分支到当前分支
- 暂时储藏当前分支下的更改,之后再恢复
git stash # 暂时储藏当前分支下的更改
git stash pop # 恢复之前的更改
- 暂存
git add [file]
或
git add [dir]
或
git add . # 添加当前目录下的所有文件到暂存区
- 提交
git commit -m "提交说明" # 将暂存区的更改提交到仓库
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m "提交说明"
- 同步
git push origin "本地分支" # 上传本地指定分支到远程仓库
git push origin --force # 强行推送当前分支到远程仓库,即使有冲突
git push origin --all # 推送所有分支到远程仓库
git push origin "本地分支":"远程分支" # 上传本地分支到远程分支
git fetch origin # 下载远程仓库的所有变动
git pull origin "本地分支" # 取回远程仓库的变化,并与本地分支合并
- 查看信息
$ git status # 显示有变更的文件
$ git log # 显示当前分支的版本历史
$ git diff # 显示暂存区和工作区的差异
$ git reflog # 显示当前分支的最近几次提交
- 缓存 PAT
git config --global credential.helper cache # 输入一次PAT后,存入缓存
三. 常见场景
1 git reset(重置) / git rebase(变基)/ git amend(修正)的使用场景
2 匿名分支
git cheackout -b "命名该匿名分支" # 想要保存匿名分支的提交
3 git reset --soft / mixed (默认)/ hard 的区别