常用推送命令
# 切换分支$ git checkout [branch-name]# 添加文件到暂存区$ git add [filename]# 添加当前更改的所有文件到暂存区$ git add .# 查看工作区与暂存区的当前情况$ git status# 将缓存区的文件提交到仓库$ git commit -m "feat: 提交说明"# git add . && git commit -m$ git commit -am "feat: 提交说明"# 绕过验证$ git commit --no-verify -m "feat: 提交说明"# 将服务器上的最新代码拉取到本地$ git pull# 推送本地仓库到远程仓库$ git push# 撤销本次的 commit$ git reset --soft HEAD^# 修改本次提交的commit(vim)$ git commit --amend
新建
# 初始化当前项目$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 在指定的目录<directory>创建一个空的git仓库$ git init --bare <directory># 拷贝一个 Git 仓库到本地$ git clone [url]
配置
# 配置全局用户名(去除 --global 当前项目生效)$ git config --global user.name "wuchendi"# 配置全局用户邮箱(去除 --global 当前项目生效)$ git config --global user.email "996194720@qq.com"# 列出当前配置$ git config --list# 列出Repository配置$ git config --local --list# 列出全局配置$ git config --global --list# 列出系统配置$ git config --system --list# 更换git 地址# 查看现有地址$ git remote -v# 替换新地址$ git remote set-url origin [new-url]
分支操作
查
# 查看所有本地分支$ git branch# 查看所有远程分支$ git branch -r# 查看所有本地分支和远程分支$ git branch -a
增
# 新建一个分支,但依然停留在当前分支$ git branch [branch-name]
切
# 从当前分支,切换到指定分支,并更新工作区$ git checkout [branch-name]# 创建并切换到新建分支$ git checkout -b [branch-name]# 切换到上一个分支$ git checkout -
合
# 合并指定分支到当前分支$ git merge [branch-name]# 选择一个 commit-id,合并进当前分支# 总结下 git cherry-pick 是本地特性,本地要有这个 commit-id 才可以被 git cherry-pick$ git cherry-pick [commit-id]# 取消 merge$ git merge --abort
推送
# 推送本地仓库到远程仓库$ git push# 推送到远程分支$ git push origin [branch-name]# 强制推送本地覆盖远程(谨慎)$ git push -f -u origin dev
删
# 删除分支$ git branch -d [branch-name]# 删除远程分支$ git push origin --delete [branch-name]# 删除本地有但在远程库已经不存在的分支$ git remote prune origin
回滚
# commit$ git revert [commit-id]# 针对merge的 commit$ git revert [commit-id] -m# 退回到指定的 commit$ git reset [commit]# HEAD 和当前 branch 切到上一条commit 的同时,工作目录新改动和已经add到stage区的新改动也一起全都消失了$ git reset --hard HEAD^# 切到上一条commit同时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区$ git reset --soft HEAD^
重命名
$ git branch -m [old-branch-name] [new-branch-name]
其他
# 查看哪些分支已经合并到当前分支$ git branch --merged# 查看哪些分支没有合并到当前分支$ git branch --no-merged# 查看所有本地各个分支最后一个提交对象的信息$ git branch -v# 查看所有远程各个分支最后一个提交对象的信息$ git branch -r -v# 查看所有本地分支和远程分支各个分支最后一个提交对象的信息$ git branch -a -v# 重命名分支$ git branch -m [oldbranch-name] [newbranch-name]# 拉取远程分支并创建本地分支$ git checkout -b [branch-name] origin/远程分支名x
标签
# 列出所有tag$ git tag# 新建一个tag在当前 commit-id$ git tag [tag]# 新建一个tag在指定 commit-id$ git tag [tag] [commit-id]# 删除本地tag$ git tag -d [tag]# 删除远程tag$ git push origin :refs/tags/[tagName]# 查看tag信息$ git show [tag]# 提交指定tag$ git push [remote] [tag]# 提交所有tag$ git push [remote] --tags# 新建一个分支,指向某个tag$ git checkout -b [branch] [tag]
信息
# 显示有变更的文件$ git status# 显示所有提交过的用户,按提交次数排序$ git shortlog -sn# 显示指定文件是什么人在什么时间修改过$ git blame [file]# 显示某次提交的元数据和内容变化$ git show [commit-id]# 显示某次提交发生变化的文件$ git show --name-only [commit-id]# 显示某次提交时,某个文件的内容$ git show [commit-id]:[filename]# 显示当前分支的最近几次提交$ git reflog
更换
# 查看远程地址$ git remote -v# 修改远程分支地址$ git remote set-url origin https://github.com/WuChenDi/xxx.git
diff
# 显示暂存区和工作区的差异$ git diff# 显示暂存区和上一个commit的差异$ git diff --cached [file]# 显示工作区与当前分支最新commit之间的差异$ git diff HEAD# 显示两次提交之间的差异$ git diff [first-branch]...[second-branch]# 显示今天你写了多少行代码$ git diff --shortstat "@{0 day ago}"
log
# 显示当前分支的版本历史$ git log# 单行展示版本记录$ git log --oneline# 显示commit历史,以及每次commit发生变更的文件$git log --stat# 搜索提交历史,根据关键词$git log -S [keyword]# 显示某个commit之后的所有变动,每个commit占据一行$ git log [tag] HEAD --pretty=format:%s# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件$ git log [tag] HEAD --grep feature# 显示某个文件的版本历史,包括文件改名$ git log --follow [file]$ git whatchanged [file]# 显示指定文件相关的每一次diff$ git log -p [file]# 显示过去5次提交$ git log -5 --pretty --oneline
rebase(谨慎)
# 将 test 应用到 master 上面# git rebase <basebranch> <topicbranch>$ git rebase master test
分支管理规范
| 分支 | 名称 | 环境 | 备注 |
|---|---|---|---|
| master | 主分支 | 生产环境 | 永远是可用的、稳定的、可直接发布的版本,不能直接在该分支上开发 |
| release | 预发布分支 | 验收测试环境(数据同步生成环境) | 在合并好feature分支的develop分支上创建,主要是用来测试bug的分支,修改好bug并确定稳定之后合并到develop和master分支,然后发布master分支 |
| hotfix | 紧急修复分支 | 开发者调试与开发环境 | 项目上线之后可以会遇到一些环境问题需要紧急修复,在master分支上创建,流程跟release分支相似,修复完成后合并到develop和master分支 |
| develop | 开发主分支 | 功能验收测试环境 | 代码永远是最新,所有新功能以这个分支来创建自己的开发分支,该分支只做只合并操作,不能直接在该分支上开发 |
| feature | 功能开发分支 | 开发环境 | 在develop上创建分支,以自己开发功能模块命名,功能测试正常后合并到develop分支 |
git 提交
类型(可选的作用域):<描述>
# 主要type$ feat: 增加新功能$ fix: 修复bug# 特殊type$ docs: 只改动了文档相关的内容$ style: 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号$ build: 构造工具的或者外部依赖的改动,例如webpack,npm$ refactor: 代码重构时使用, 无新功能$ revert: 执行git revert打印的message(回退)$ perf: 性能优化$ test: 增加测试$ chore: 构建过程或辅助工具的变动
