工作中用到git比较多,对一些比较常规对操作做一个记录。
分支相关
- 若仓库里新建了分支,本地更新分支:git fetch
- 切换分支/新建分支:git checkout xx/git checkout -b xxxx
-
在现有分支上新建分支,是从现有分支延伸出去的分支,所以若多人开发同一项目,可以在切换到仓库的开发分支后在本地新切一个分支,避免在仓库分支上开发与别人造成冲突。
- 推送本地分支到远端:git push -u origin 本地分支名
- 若直接在远端分支上改,但是远端分支有更新,为了在pull远端代码的时候保留本地已修改代码,可进行以下操作:
1、git stash,保留本地代码
2、git pull,拉取远端代码
3、git stash pop,恢复本地代码跟远端代码合并
提交相关
- 若直接在仓库的分支开发提交,则直接提交即可:git add . git commit -m "提交内容" git push
- 若多人共同开发,为避免提交冲突,会在本地新建分支进行单独开发,在这个情况下提交的话有多种方法,我仅记录我自己常用操作,比较方便易懂:
1、在本地分支a提交,见上一条操作,不需要git push,同时git log查询提交的序号,记住前四位。
2、切换到仓库的开发分支,git pull,git cherry-pick xxxx(第一个步骤查询到的前四位序号)。
3、提交:git push。
4、若开发还未完成需要继续开发:删除本地分支a,从仓库开发分支新建本地分支。
5、这个流程需要一个删除新建分支的步骤,但是相比较于其他流程而言我个人比较倾向于这个。
- 多次commit提交,为了提交过程干净清爽需要合并,为了安全起见可以在本地分支先合并,再由仓库开发分支cherry-pick过来,具体流程:
1、git rebase -i HEAD~3(合并最近3条)/git rebase -i [startpoint] [endpoint] 前开后闭区间,个人比较喜欢HEAD方法,因为如果有比较乱的提交了,及时处理比日后堆起来处理更好。
2、进入rebase界面之后与终端操作文档相同,按i进入编辑界面,除了第一条保留pick外,后续几条统一改为s,按esc退出编辑界面,wq保存。
3、进入编辑提交记录界面,第一条可以修改提交的内容,也就是commit的时候写的提交内容,后面几条状态为s的记录可以按两下d删除,退出编辑,wq保存。
4、rebase之后提交一般需要git push -f强制提交。
5、git log 可以看到提交记录已合并。
- git add后撤销
git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
统计代码量
- git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc+= $1 - $2 } END { printf "addved lines: %s,removed lines: %s, total lines: %s\n", add, subs, loc }' -
其他内容等后续使用了继续更新。