Git 技巧拾遗

输出漂亮的log --graph

使用git log --graph -2git log --pretty=format:"%h"可以定制很多的输出格式,在此基础上添加自己喜欢样式,并保存到git config中下次使用就免去了每次输入一长串命令的困扰

  • 全局添加
git config --global alias.lg "log --graph"

或者使用更漂亮的

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative"

另一个例子

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"

效果如下:


Git 技巧拾遗_第1张图片
git lg

tip:如果输出太长,别忘了按q退出. 如果想只显示前几行log,可加参数 如:git lg -10,会输出10条数据

查看历史记录更改内容

git log比较有用的选项是 -p 或 --patch ,它会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交:

git log -p -2
Git 技巧拾遗_第2张图片
git log -p -2

查看历史提交简略统计信息

git log --stat
Git 技巧拾遗_第3张图片
git log --stat

git log 常用选项

选项 说明
-p 按补丁格式显示每个提交引入的差异。
--stat 显示每次提交的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
--relative-date 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
--graph 在日志旁以 ASCII 图形显示分支与合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
--oneline --pretty=oneline --abbrev-commit 合用的简写。
- 仅显示最近的 n 条提交。
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示作者匹配指定字符串的提交。
--committer 仅显示提交者匹配指定字符串的提交。
--grep 仅显示提交说明中包含指定字符串的提交。
-S 仅显示添加或删除内容匹配指定字符串的提交。

示例:

git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \
   --before="2008-11-01" --no-merges -- t/

git清除所有修改

  1. 首先查看git状态,是否有add或commit
    git status

2.在未发生任何add或commit的情况下:
git checkout .
这条命令,只能清除所有修改的文件,但是新建的文件和文件夹无法清除,还必须使用:
git clean -df
清除所有新建的文件及文件夹

  1. 对于add的部分,先要撤销add:
    git reset .
    然后再进行第一步的操作即可

git查看相关配置

$ git config 
Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file      use given config file
    --blob       read config from given blob object

Action
    --get                 get value: name [value-regex]
    --get-all             get all values: key [value-regex]
    --get-regexp          get values for regexp: name-regex [value-regex]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value_regex]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-regex]
    --unset-all           remove all matches: name [value-regex]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <>         value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --default      with --get, use default value when missing entry

使用方式:
git config + [Config file localtion] + [Action], 示例如下:

$ git config --system --list
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
credential.helper=manager
...
$ git config --local --list
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
remote.origin.url=https://gitee.com/.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
gitflow.branch.master=master
gitflow.branch.develop=develop
branch.develop.remote=origin
branch.develop.merge=refs/heads/develop
gitflow.prefix.feature=
gitflow.prefix.bugfix=
gitflow.prefix.release=
gitflow.prefix.hotfix=
gitflow.prefix.support=
gitflow.prefix.versiontag=
gitflow.path.hooks=C:/work/web/.git/hooks

新添加的文件被忽略问题

  1. 经过分析,是因为在.gitignore文件里面将此文件的父文件夹给添加进去了,即忽略了该文件夹下的所有文件改动,所以就不会上传到远端.
    解决方法:将.gitignore文件里的规则改变一下,删除该文件夹路径规则(或修改),使此文件能够在git控制之下.
  2. 还有一种情况是,git默认忽略.dll .exe文件,需要手动添加!*.dll!*.exe

拉取代码: git pull , git merge ,git stash

  1. 将修改好的代码提交
git commit -am "commit something"
  1. 将代码从远端拉回
    方法1: git pull
    方法2:git fetch origin + git merge origin/master

  2. 想临时不提交,并把代码拉到本地

git stash
git pull
git stash pop

查看修改的内容

  • 查看未暂存的修改 git diff
  • 查看已暂存修改 git diff --cached or git diff --staged

统计相关

1. 统计git提交次数, 展示所有人的提交次数

. 注意, 统计相关命令运用到了bash命令, 需要在bash中运行

$  git log | grep "^Author: " | awk '{print $2}' | sort | uniq -c | sort -k1,1nr

效果如下:


Git 技巧拾遗_第4张图片
统计git提交次数

2. 统计时间内提交次数

$ git log --author=换成你的git名字 --since="2020-1-29" --no-merges | grep -e 'commit [a-zA-Z0-9]*' | wc -l

效果如下:


统计时间内提交次数

3. 统计提交行数

将展示该用户增加行数,删减行数,剩余行数

git log --author="换成你的git名字" --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 }' -

效果如下:


统计提交行数

修改已提交commit信息

1. 修改最近依次commit的信息

使用命令: git commit --amend 此时会启动安装git时的默认编辑器, 如果默认时vi则使用vi相关命令修改, 如果时其他文本编辑器(如: vscode)修改会更简单(不需要记住vi命令).
如果是vi编辑器, 记住几点就可以: 按i进入编辑模式, 开始编辑要修改的内容, 改完后按ESC键退出编辑模式,然后按:wq保存我们编辑的信息.完成.
无论用那种编辑器修改完保存之后会看到最后的一条git提交信息已经修改了.

2. 修改最近的历史记录提交信息

例如我提交了几条信息:


Git 技巧拾遗_第5张图片
git commit log

这里我打算修改倒数第三条, feat: 能源相关测试,
则使用命令:git rebase -i HEAD~3, 此时如果用的默认编辑器是vscode, 则会自动代开, 显示如下

Git 技巧拾遗_第6张图片
vscode显示git

选择对应的commit将其改成edit后保存后
在cmd里会提示使用git commit --amend修改之后使用git rebase --continue

Git 技巧拾遗_第7张图片
git commit --amend

在cmd里输入 git commit --amend
Git 技巧拾遗_第8张图片
image.png

修改之后保存,然后输入命令 git rebase --continue
git rebase --continue

git log 后查看修改的commit已经修改成功.

你可能感兴趣的:(Git 技巧拾遗)