1. 简介
安装
参考官网 Git
基本配置
配置Git 全局用户名和邮箱
git config –global user.name “xxx”
git config –global user.email “xxx@email.com“
git config –list 查看配置信息
2. 快速开始
Git 分工作空间(work dir),暂存区间(index),版本库(objects),远程仓库(remote)
创建本地新的存储库
1
git init
添加文件到暂存区间
1
git add <files>
将暂存区文件提交到版本库
1
git commit -m 'Add file.'
将本地提交推送到远程仓库
1
git push <remote url>
区分几个命令:
git clone 将远程仓库完整克隆到本地磁盘
git fetch 更新远程仓库最新版本信息到本地版本库
git pull 更新远程仓库最新版本信息并且更新当前工作区间文件
Git 管理下文件的几种状态:
已暂存 已修改 已提交
3. 分支管理和标签
分支管理命令
1
2
3
4
5
6
7
8
9
10git branch --list # 罗列本地所有分支
git branch --all # 罗列本地和远程所有分支
git branch -r # 罗列远程所有分支
git branch -v # 显示各分支最后提交信息
git checkout <branch name> # 切换分支
git checkout -b <new branch name> # 创建新分支
git push origin <new branch name> # 推送新分支到远程
git checkout -m <old branch> <new branch> # 重命名分支名称
git branch -d <[list]branch name> # 删除本地分支
git push origin --delete <branch name> # 删除远程分支- 分支合并
git merge rebase 是状态同步过程冲突的解决方式。
远程同步本地。
1
2
3
4
5
6
7origin/dev
|
+−−−− (E)−−−−(F)
/
(A) −− (B)−−−−−−− (C) −− (D)
|
dev远程分支新增 E F 提交记录,本地分支存在 C D 提交执行 git pull(默认冲突方式为merge) 远程更新后产生新Merge提交(如下图)
1
2
3
4
5
6
7origin/dev
|
+−−−− (E)−−−−(F)−−−−−−−−−−−−−−−−
/ \
(A) −− (B) −−−−−−−−(C) −− (D)−−−−(G − merge commit)
|
dev我们使用 git pull-rebase 方式,rebase的时候本地提交 C D 被重新排序,而该期间不会产生新的提交。
1
2
3(A) −− (B)−−−−−−− (E) −− (F) −−−−−−− (C') −− (D')
| |
origin/dev dev
标签(Tag)
标签主要用于代码归档,利于回滚。
标签管理命令
1
2
3
4
5
6git tag -l # 罗列本地所有标签
git show <tag name> # 显示指定标签
git tag -a v_1.0.0 -m "备注" # 创建标签
git push origin <tag name> # 推送标签到远程
git tag -d <tag name> # 删除本地标签
git push --delete origin <tag name> # 删除远程标签
4. 工作流程
初始化项目创建 master dev test 三个分支
1 | (A) −− (B) -> origin/dev # 开发主分支 |
以上三个分支伴随项目整个生命周期
1 | + (E) -> feature/login |
feature 分支用于功能开发中遇到需要分叉的情况,一般在功能开发完成后删除。操作命令:
1 | git checkout -b feature/login # 创建 feature/login 分支 |
hotfix 分支主要用于bug修复
1 | git checkout -b hotfix # 创建 hotfix 分支 |
5. 问题
对比变化的文件
1
2
3
4git diff <file> # 查看工作空间和暂存取件指定文件变化
git diff <commit> # 查看指定提交变化
git diff <commit> <commit> # 比对两个提交变化
git diff --cached # 查看暂存区间和版本库变化回退问题
撤销方式:checkout revert reset,假如我需要撤销一个 “bad_commit” 的提交。
git checkout 撤销 (这种方式是通过切换新分支的方式达到撤销的目的)
1
2
3git log --oneline # 查看提交历史
git checkout <pre_commit> # 切换到 “bad_commit”提交之前
git checkout -b <new branch> # 该分支就不包含 “bad_commit”git revert 撤销 (这种方式会追加一个撤销提交在后面)
1
git revert <bad_commit> # 撤销指定提交
git reset
- git reset –hard 重置暂存和工作空间,(即,之前提交内容将丢失)。
- git reset –mixed 重置暂存空间但不重置工作空间(即,保留更改的文件但未标记为提交)并报告尚未更新的内容,默认为该选项。
- git reset –soft 不会重置暂存和工作空间(即,保留所有改动文件)。