摘要 分享Git日常操作中常用的命令,分享如何统计在项目中贡献的代码量。

下面列出Git bash常用命令。

1. git clone **(项目地址)

克隆一个git项目到本地,将git项目拉取到本地

2. git status

查看文件状态,列出当前目录没有被git管理,以及被修改过还未提交的文件

3. git add *

将我们提交的文件添加到索引库中(添加到缓冲区),*可以是路径也可以是.符号,git add . 代表将当前目录下的所有文件都添加到索引库中,如果指定路径则代表将制定路径的文件添加到索引库中。

4. git commit -m "备注"

将文件推送到本地仓库中,-m 后可以填写此次提交的备注如git commit -m "提交删除功能代码",那么在git项目中的提交记录里面就能看见你的推送备注。这一步仅仅是放在缓冲区中,还未真正提交代码

5. git push origin 分支名

这一步才是推送代码推送时需要跟分支名,表示需要将代码推送至某个分支.如git push origin dev表示你要讲代码推送至dev分支。

6. git pull

更新当前分支的代码,获取最新的代码

7. git checkout 分支名

从当前分支切换至另一个分支

8. git merge 分支名

当前分支合并其他分支。

9. 提交被忽略的文件

执行$ git add src/XXX的时候如果抛出如下异常,

The following paths are ignored by one of your .gitignore files:src/XXX

Use -f if you really want to add them.

提示提交的时候,需要加 –f。使用如下命令即可解决:

$ git add -f src/XXX

 

接下来分享一下统计代码量的Git命令。为啥会提到分析 Git 日志来统计代码量这个功能呢?

一个是统计工作量,贡献量的时候 —— 这一看就是要发奖金!另一个是统计自己代码量的时候 —— 十有八九是准备跳槽了。

哈哈,言归正传。先介绍在哪统计。

  1. 打开Git Bash;
  2. 切换到你工程所在的目录;
  3. 执行满足如下需求的命令即可。

指定用户名和起止日期

git log --since="2018-03-01" --before="2019-01-09" --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

added lines: 15909 removed lines : 6359 total lines: 9550

直接复制粘贴即可,username换成你的用户名,【since="2018-03-01" --before="2019-01-04"】中的日期换成你想要的日期。执行后会输出在当前项目内,指定用户名的用户的代码量统计信息,示例如下:

统计所有用户的行数信息

它扫描了当前分支的每个文件,然后输出每个人的代码增删行数信息。

git log --shortstat --pretty="%cE" | sed 's/\(.*\)@.*/\1/' | grep -v "^$" | awk 'BEGIN { line=""; } !/^ / { if (line=="" || !match(line, $0)) {line = $0 "," line }} /^ / { print line " # " $0; line=""}' | sort | sed -E 's/# //;s/ files? changed,//;s/([0-9]+) ([0-9]+ deletion)/\1 0 insertions\(+\), \2/;s/\(\+\)$/\(\+\), 0 deletions\(-\)/;s/insertions?\(\+\), //;s/ deletions?\(-\)//' | awk 'BEGIN {name=""; files=0; insertions=0; deletions=0;} {if ($1 != name && name != "") { print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net"; files=0; insertions=0; deletions=0; name=$1; } name=$1; files+=$2; insertions+=$3; deletions+=$4} END {print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net";}'

最新文章

  1. C++ 回调函数 实现 的测试代码
  2. [software development] 需求分析checklist
  3. SQL Server 索引和表体系结构(一)
  4. Linux用户查询
  5. WebRTC录音(1)-实现通话双向录音
  6. nodejs的mysql模块学习(八)关闭连接池
  7. Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)
  8. Segment FRAM_DATA must be defined in a segment definition option (-Z, -b or -P)
  9. php curl请求
  10. 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
  11. AttributeError: 'list' object has no attribute 'keys'
  12. 洛谷P2765魔术球问题 最小路径覆盖
  13. easyui,文件引用
  14. 关于Java程序流程控制的整理(未完善)
  15. ZJOI Round2游记
  16. 第二次作业<1>
  17. jquery validate自定义规则
  18. IDA Pro 权威指南学习笔记(十四) - 操纵函数
  19. 编写高质量代码改善C#程序的157个建议——建议148:不重复代码
  20. Django生成CSV文件

热门文章

  1. chrome调试手机webview中页面
  2. CLOS架构是啥?
  3. springboot+shiro+redis(单机redis版)整合教程-续(添加动态角色权限控制)
  4. linux(centos7) nginx php mysql安装
  5. EventFlow.helper.js 事件流程控制
  6. js替换元素与设置时间间隔
  7. Bitmap(三)
  8. ALTER SEQUENCE 导致 REPLICAT 延时
  9. autodesk fbx sdk sample里面的工程无法调试解决方法
  10. 【CF587F】Duff is Mad AC自动机+分块