Git 思维导图
Git思维导图
Git 帮助
Git 命令手册
- git help
Git 官方文档
- https://git-scm.com/book/zh/v2
Git 配置
查看配置变量
- git config
- git config --list 列出所有配置
- –show-origin 列出配置所在文件
设置配置变量
- git config
配置文件位置
-
- /etc/gitconfig
- 包含系统上每一个用户及他们仓库的通用配置。 在执行 git config 时带上 --system 选项。
-
- ~/.gitconfig
- 只针对当前用户,这会对你系统上所有的仓库生效。在执行 git config 时带上 --global 选项。
-
- .git/config
- 针对该仓库,默认情况下用的就是它。在执行 git config 时带上 --local 选项。
-
每一个级别会覆盖上一级别的配置。
配置用户信息
- git config --global user.name
git config --global user.email
Git 仓库
获取仓库
-
- 将尚未进行版本控制的本地目录转换为 Git 仓库
- git init
-
- 从其它服务器克隆一个已存在的 Git 仓库。
- git clone
把文件更新到仓库
-
检查当前文件状态
- git status
-
跟踪新文件
- git add
-
提交更新
- git commit
- 不建议使用git commit -m,遵循 commit message 规范
-
忽略文件
- .gitignore文件
-
查看已暂存和未暂存的修改
- git diff
- 建议使用 diff 工具,git difftool
文件状态
-
- 已修改(modified)
- 表示修改了文件,但还没保存到本地仓库中。
-
- 已暂存(staged)
- 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
-
- 已提交(committed)
- 表示数据已经安全地保存在本地仓库中。
commit message 规范
-
格式
-
():
<body> <footer>
-
-
type:提交类别
- feat:新功能
- fix:修复bug
- docs:文档
- style:格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:测试
- chore:构建过程或辅助工具的变动
-
scope:影响范围(可以不写)
-
subject:对改变的正常描述,最好以动词开头语(尽量详细)
-
body:详细描述(可以不写)
-
footer:修改不兼容变动以及关闭 Issue时(可以不写)
.gitignore
-
- 所有空行或者以 # 开头的行都会被 Git 忽略。
-
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
-
- 匹配模式可以以(/)开头防止递归。
-
- 匹配模式可以以(/)结尾指定目录。
-
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
-
glob 模式
- glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号()表示匹配任意中间目录,比如 a//z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。
把 vimdiff 设置为 diff 工具
- git config --global diff.tool vimdiff
git config --global difftool.prompt false
代码版本/提交切换
查看过去版本/提交
-
1、提交详情
- git log
-
2、提交简介
- git log --pretty=oneline
-
3、 分支图形化
- git log --graph
回退版本/提交
-
1、回退到当前最新提交
- git reset --hard HEAD
-
2、回退到上次提交
- git reset --hard HEAD^
-
3、回退到上n次提交
- git reset --hard HEAD~n
-
4、回退到某次提交
- git reset --hard commitid
重返未来版本
-
1、查看历史提交以及被回退的提交
- git reflog
- 注意:该记录有时限,且只在本地
-
2、回到未来版本
- git reset --hard
撤销修改
-
1、工作区文件撤销
没有提交到暂存区/没有git add-
撤销修改
- git checkout
-
-
2、暂存区文件撤销
-
将暂存区文件撤销到工作区
- git reset HEAD
-
撤销修改
- git checkout
-
-
3、提交到了版本库
- 参见回退版本/提交
删除文件
-
1、删除文件
从版本库中删除文件- git rm
- 修改后需要提交
-
2、恢复删除
- 参考撤销修改
-
3、从版本库中删除文件,但是本地不删除该文件
- git rm --cached
移动文件
-
将文件/文件夹移动
- git mv
暂存修改
- 参照分支-暂存修改
分支
创建与合并分支
-
1、创建分支
-
仅创建
- git branch 分支名
-
创建并切换
- git checkout -b 分支名
-
注意:在本地仓库操作,创建的都是本地分支
-
-
2、切换分支
- git checkout 分支名
-
3、合并分支
-
git merge
合并某分支到当前分支 -
注意:合并分支时禁用fast forward
- git merge --no-ff 分支名
-
git rebase
若无特殊需要不建议使用
-
-
4、删除分支
-
删除本地分支
-
删除未合并分支
- git branch -D 分支名
-
删除已合并分支
- git branch -d 分支名
-
-
删除远程分支
-
删除远程分支
- git push origin -d 分支名
- git push <远程仓库名> -d 分支名
-
建议界面操作
-
-
-
5、查看分支
-
查看当前分支
- git branch
-
查看所有分支信息
-
git branch -a
- 本地分支为本地分支名
- 远程分支为<远程仓库名>/分支名
-
-
-
6、合并分支,解决分支冲突
-
将要合并的分支更新到最新
-
切换到主分支
-
合并分支
-
解决合并时的conflict
-
提交到版本库
-
合并成功
-
查看分支状态
- git log --graph
- git log --graph --pretty=oneline --abbrey-commit
-
-
7、开发完需要提交PR/MR
- 通过PR/MR来合并开发分支与主分支
暂存修改
-
1、暂存工作现场
- git stash
-
2、恢复工作现场
-
恢复
- git stash apply
-
删除
- git stash drop
-
恢复+删除
- git stash pop
-
多人协作
-
1、查看远程库信息
-
详细
- git remote -v
-
不详细
- git remote
-
-
2、更新/推送远程库
-
更新远程库信息
- git fetch
-
将远程库最新修改更新到本地
- git pull
- git pull可以认为是
git fetch+git merge
-
将本地修改推送到远程库
- git push
- git push origin 分支名
-
-
3、本地分支与远程分支交互
-
使用远程分支A创建本地分支
- git checkout -b A origin/A
- origin是远程仓库名,若名字一样origin/A可以省略
-
将本地分支与远程分支作关联
- git branch --set-upstream A origin/A
- 提示no tracking information错误
-
建议开发遵循或者参照git标准工作流,比如git flow、github flow或者gitlab flow
代码版本tag
1、查看tag
-
本地tag
- git tag
-
远程tag
- git tag -r
2、操作tag
-
添加tag
-
给当前版本添加tag
- git tag 标签名
-
给历史版本添加tag
- git tag 标签名 commitid
-
-
删除tag
-
删除本地标签
- git tag -d 标签名
-
删除远程标签
- git push origin -d 标签名
-
-
推送到远端仓库
-
git push origin 标签名
-
推送所有未提交的tag
- git push origin --tags
-
-
更新到本地
- git pull origin --tags
tag与branch的操作基本一致,因为tag就是一个仅可读的branch
其他生僻命令
git blame
git bisect
- 过二分查找定位引入 bug 的变更
git relog
…
可以使用git help查看git常用的命令,使用git help -a查看git可用的所有命令
git flow
图示
常用分支
-
Master 分支
- 这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改。
-
Develop 分支
- 这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支
-
Feature 分支
- 这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release
-
Release分支
- 当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支
-
Hotfix分支
- 当我们在Master发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release
上一篇: IDEA-自定义常用代码块
下一篇: laravel框架思维导图