Git-技巧
标准提交规范
提交的内容主要有三个部分:
- 标题行: 必填, 描述修改的类型和内容
- 主题内容: 描述为什么修改, 做了什么修改等
- 页脚注释: Closed Issues或者Breaking Changed
常用的修改项:
- [feat]:新功能(feature)
- [fix]:修补bug
- [docs]:文档(documentation)
- [style]: 格式(不影响代码运行的变动)
- [refactor]:重构(即不是新增功能,也不是修改bug的代码变动)
- [test]:增加测试
- [chore]:构建过程或辅助工具的变动
git 别名操作
简化命令
git config --global alias.<handle> <command>
比如:git status 改成 git st,这样可以简化命令
git config --global alias.st status
使用Commitizen代替git commit
全局安装:
npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
之后使用git cz代替git commit就可以了.
分支操作
分支相关的一些操作
快速切换到上一个分支
git checkout -
删除已经合并到master的分支
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d
修改分支名称
git branch -m old_branch new_branch # 重命名本地分支
git push origin :old_branch # 删除旧分支
git push --set-upstream origin new_branch # 推送新分支到远程,并且本地分支进行跟踪
关联远程分支
git branch -u origin/mybranch
或者在push的时候加上-u参数:
git push origin/mybranch -u
远程删除了分支, 本地也想删除
git remote prune origin
从远程分支中创建并切换到本地分支
git checkout -b <branch-name> origin/<branch-name>
版本操作
重新设置第一个commit
把所有的改动都重新放回工作区, 并清空所有的commit, 这样就可以重新提交第一个commit了
git update-ref -d HEAD
回到远程仓库的状态
放弃本地的所有修改, 回到远程仓库的状态
git fetch --all && git reset --hard origin/master
合并commit节点
git log #获取目标commit的id
git rebase -i commitId #从该commit开始rebase,这里会进入vi模式
# 根据提示对commit进行pick、fixup,或者squash
# 修改完成后退出vi编辑器`:wq`
# 如果修改为squash, git会自动跳转到commit message的编辑界面进行commit message的编辑
修改commit提交信息
git rebase -i commitId #从该commit开始rebase,这里会进入vi模式, 可以输入Head指针或者Root头指针
# 进入编辑文件, 将想要修改的commit的前缀改为edit
# :wq 保存退出
git commit --amend
git rebase --contine
# 交替使用这两个命令,依次修改对应的commit提交信息
git push -f origin # 强制推送到远程仓库, 覆盖分支提交信息
以新增一个commit的方式还原某个commit的修改
git revert <commit-id>
回到某个 commit 的状态,并删除后面的 commit
和revert的区别: reset命令会抹除某个commit id之后的所有commit
git reset <commit-id> #默认就是-mixed参数。
git reset --mixed HEAD^ #回退至上个版本,它将重置HEAD到另外一个commit,并且重置暂存区以便和HEAD相匹配,但是也到此为止。工作区不会被更改。
git reset --soft HEAD~3 #回退至三个版本之前,只回退了commit的信息,暂存区和工作区与回退之前保持一致。如果还要提交,直接commit即可
git reset --hard <commit-id> #彻底回退到指定commit-id的状态,暂存区和工作区也会变为指定commit-id版本的内容
清除gitignore文件中记录的文件
git clean -X -f
状态查询
查看冲突文件列表
展示工作区的冲突文件列表
git diff --name-only --diff-filter=U
展示暂存区, 工作区和最近版本的区别
输出工作区, 暂存区和本地醉经版本的区别:
git diff HEAD
展示本地分支关联远程仓库的情况
git branch -vv
列出所有远程分支
git branch -r
查看某段代码是谁写的
git blame <file-name>
查看两周内的改动
git whatchanged --since='2 weeks ago'
展示简化的commit历史
git log --pretty=oneline --graph --decorate --all
SubModule 相关操作
子模块的添加
# 添加子模块
git submodule add <url> <path>
添加成功后可以在git status命令下查看到.gitmodules文件中新增了子模块的路径
子模块的使用
# 下载子模块
git submodule init
git submodule update
# 或者
git submodule update --init --recursive
子模块的更新
进入子模块执行git pull进行更新, 查看git log查看相应提交.
删除子模块
rm -rf 子模块目录: 删除子模块目录及源码vi .gitmodules: 删除项目目录下.gitmodules文件中子模块相关条目vi .git/config: 删除配置项中子模块相关条目rm .git/module/*: 删除模块下的子模块目录, 每个子模块对应一个陌路
执行完成后, 再执行添加子模块的命令即可, 如果仍然报错, 可以执行:
git rm --cached <子模块名称>