一.基础操作
0.基本概念
git持有三棵树
- 工作目录持有实体文件
- 暂存区,缓冲改动
- Head 指向最后一次提交结果
1.初始化本地项目
git init
2.检出项目
git clone <server|path>
3.添加和提交
git add <单文件>
git add *
git commit -m "" # 添加注释并提交到HEAD
4.本地仓库与远端建立|删除联系
git remote add origin <远端仓库地址>
git remote rm origin
5.推送提交的改动到远程服务器
git push origin <branch>
6.分支检出|删除
- 检出
git checkout -b feature/test # 检出新分支并跳转
git checkout <切换分支>
- 删除
git branch -d <分支> #需要切换到其他分支
git push origin --delete <远程分支名称>
7.拉去远程代码变更
git pull
8.合并分支
git merge <branch>
9.查看分支差异
git diff <source_branch> <target_branch>
10.创建标签
git tag <1.0.0|tag> <commit id>
11.查看提交历史
git log
git log --author=bob # 指定提交人
git log --pretty=oneline # 没个提交只占一行输出
git log --graph --oneline --decorate --all
git log --name-status # 改变的文件
git log --help # help doc
12.后悔药
- 使用Head区的代码,替换掉本地文件的改动
git checkout -- <filename>
- 将远程的代码拉取到本地,确认后手动合并
git fetch <origin>
- 放弃本地所有提交
git reset --hard origin/master
- 撤回commit修改,但是代码不回滚
git reset --soft HEAD^ # HEAD^,HEAD~1 上次 , HEAD~2 两次
- 回滚版本,代码回滚
git reset --hard HEAD^ #回退到上个版本
git reset --hard HEAD~3 #回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard <commit_id> # 退到/进到 指定commit的sha码
git push origin HEAD --force # 由于本地HEAD版本低于master版本提交需要强制才能成功
13.ignore文件
在根目录下添加.gitignore文件
# 忽略*.o和*.a文件
*.[oa]
# 忽略*.b和*.B文件,my.b除外
*.[bB]
!my.b
# 忽略dbg文件和dbg目录
dbg
# 只忽略dbg目录,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目录
dbg
!dbg/
# 只忽略当前目录下的dbg文件和目录,子目录的dbg不在忽略范围内
/dbg
# 以'#'开始的行,被视为注释.
* ?:代表任意的一个字符
* *:代表任意数目的字符
* {!ab}:必须不是此类型
* {ab,bb,cx}:代表ab,bb,cx中任一类型即可
* [abc]:代表a,b,c中任一字符即可
* [ ^abc]:代表必须不是a,b,c中任一字符
二.git flow 工作流
1.初始化
git flow init
git flow init -f
2.特性|功能 feature - 可以有多个
- 增加新特性- 基于develop分支创建一个feature/xxx
git flow feature start MYFEATURE
- 完成新特性
合并 MYFEATURE 分支到 'develop'
删除这个新特性分支
切换回 'develop' 分支
git flow feature finish MYFEATURE
- 发布新特性 -推送到远端
git flow feature publish MYFEATURE
- 拉取功能分支
git flow feature pull origin MYFEATURE
git flow feature track MYFEATURE # 跟踪
- 发布版本基于develop生产环境的release - 只能有一个
- 创建
git flow release start RELEASE [BASE]
- 完成
归并 release 分支到 'master' 分支
用 release 分支名打 Tag
归并 release 分支到 'develop'
移除 release 分支
git flow release finish RELEASE [BASE]
- 发布
git flow release publish RELEASE
- 签出
git flow release track RELEASE
- 紧急修复-hotfix-唯一
- 创建补丁
git flow hotfix start VERSION [BASENAME] # [BASENAME]为finish release时填写的版本号
- 完成
当完成紧急修复分支,代码归并回 develop 和 master 分支。
master 分支打上修正版本的 TAG。
git flow hotfix finish VERSION