有用的git bash命令—改变你的认知
本文介绍一些有用又有趣的git bash 命令,建议在git bash运行,不建议使用IDE的终端(Terminal)。
一、小型团队/无审核流程 git 代码管理三连:
git add . # 此命令执行后所有红色文件会变绿
git commit -m "commit message" # 执行后绿色文件消失,而待push的commit数量加1
git push # 执行后提示"Your branch is up to date with xxx"
【前提条件】
- 已正确配置.gitignore文件;
- 已跟踪远程仓;
- 代码本地编译无错误(不是git要求,是我要求的,哈哈。一起diss把错误代码推送到远程仓的>>>同事<<<);
- 有推送权限。
危险提示 虽然三连很爽,但是也要小心某些错误导致部分文件未提交或者根本就是命令打错了-_-,所以建议以上三个命令,每执行一个,使用以下命令查看是否正确执行。
git status # 查看当前状态,更多信息请前往git官网:https://git-scm.com/book/zh/v2
二、常用命令
以下介绍一些常用命令。
打开资源管理器(当前路径文件夹)
start .
从git bash直接打开资源管理器,有时候文件夹已全部关闭,此时用真是十分方便呢。
查看提交历史
git log
重置提交
git reset --soft [commitId|HEAD|HEAD~]
- 如果本地修改已add但未commit,使用 HEAD;
- 如果想重置git log中的第一个,使用 HEAD~;
- 如果想重置git log中的第二个,使用 HEAD~~; (没错,第几个就用几个~)
- 如果想重置git log中的第三个,使用 HEAD~~~……当然也可以使用 commitId,没错,就是每个git log中的第一行:
commit xxxxxxxx……xxxx (commit 后面这一长串就是 commitId)
暂存修改
暂存修改,官方名称:贮藏,参考:Git 工具 - 贮藏与清理
即,若当前工作区存在不想放弃的修改,但又不想commit,可以使用此命令暂存修改,使用之后你的工作区就是干净的了。
git add .
git stash # 执行此命令后会默认暂存名为 stash@{0}
应用暂存内容
查看暂存列表
git stash list
如果之前有暂存,则会显示暂存的列表,例如:
$ git stash list
stash@{0}: WIP on xxxxxx
stash@{1}: WIP on xxxxxx
其中stash@{0}、stash@{1}就是暂存的名称。
应用暂存
git stash apply [stash]
应用成功后暂存不会消失,若有需要,使用 git stash drop [stash] 命令删除。
查看本地分支对应的远程分支及落后版本
git branch -vv
当你不确定本地分支当前跟踪哪个远程分支时相当有用。
三、gerrit 提交与推送
许多大公司的团队在使用git管理代码时,都会使用gerrit规则,并开启代码审核流程,这样做的好处是避免因个人原因引入致命缺陷,或其他可能导致上线推迟的问题。每一次提交都必须经过分支冲突检查、静态代码检查、本地编译、他人review等过程,按照既定流程完成操作后,可以自动合入之前指定的分支,减少个人因素带来的错误。在git bash中使用gerrit规则提交并推送代码:
提交代码
提交代码,以便生成 commit id:
git add .
git commit -m "commit message"
增加 Change-Id
取得commitId之后作为Change-Id,追加提交/修改提交信息:
git commit --amend
按 i 进入编辑模式,编辑提交信息形如以下内容(团队另有约定则以约定为准):
update xxx and xxx
(空行)
Change-Id: xxxxxxxx
推送到远程仓
因gerrit开启了代码审核,所以不能直接使用 git push命令,须像下面这样推送:
git push origin HEAD:refs/for/[remote-branch]
命令中的[remote-branch]即为想要推送到的远程仓。若推送失败会出现红色的错误信息,若推送成功会给出远程code review的地址
remote: http://xxx.xxx.xxx.xxx:xxxx/xxxx
且有 [new branch] 字样,当然这并不是新建了远程分支。
接下来的+1、+2就可以问问你的同事或者领导了。
注:若提示Change-Id不存在或无效,则考虑是不是团队的Change-Id另有约定,修改后可再次推送。
今天推送代码的时候又发现一个有意思的事:增加了Change-Id之后push,结果提示我Change-Id不在页脚,也就是不在最后一段,开始以为是后面的带“#”注释引起的,删掉提交还是一样(其实根本删不掉,再次编辑提交信息还是会复原,这可能是git commit命令关联的本地脚本自动写的),后来观察其他人的git log,发现我的提交信息似乎前面多了几个空格缩进,然后盲猜是不是空格引起的,修改提交信息以及Change-Id从第一个字符开始,再次推送,OK了,真是无语又汗颜,这兼容性貌似有点差,而我居然因为一个空格浪费了接近两个小时。