一些 实用的 git 小技巧

前些月,写了一个关于 git 的表格,叫Git Cheat Sheet,现分享一些有用的小技巧,更多内容请移步,另有一个很是不错的关于 git 小技巧的项目 git-tips前端

是谁动了个人代码

谁动了个人代码?node

谁的 bug 指到了个人头上?git

团队合做时,常常会出现这样的问题。这时候可使用 git blame <file> 来定位代码的最后一次修改。可是,有一个问题,这并不能看出本行代码之前的修改。好比项目组中某人对所有代码进行了格式化,git blame 就失去了做用。此时,能够与另外一个有用的命令 git log -p <file> 结合使用,能够查看文件的更改历史与明细,最终找到这个锅究竟应该由谁来背。github

git blame -L 10,12 package.json
git log -p -L 10,12:package.json
复制代码

快速切换合并分支

当你常常工做于 A 与 B 两个分支,须要来回切。这时命令应该是 git checkout A,但这里有一个更简单的命令,git checkout -,表示切到最近的一次分支。若是你须要把 B 分支的内容合并过来,可使用 git merge -json

题外话,cd - 表明进入最近目录,也至关实用。ui

git checkout -
git merge -
复制代码

统计项目

统计项目各个成员 commit 的状况,好比你能够查看你本身的项目的 commit 数以及他人对你项目的贡献数spa

git shortlog -sn
git shortlog -sn --no-merges      # 不包含 merge commit
复制代码

快速定位提交

若是你的 commit message 比较规范,好比会关联 issuse 或者当前任务或者 bug 的编号,此时根据 commit message 快速定位: git log --grep "Add"code

若是你的 commit message 不太规范,只记得改了哪几行代码,此时也能够根据每次提交的信息查找关键字,是 git log -S "setTimeout"cdn

同时,也能够根据做者,时间来辅助快速定位。ip

git log --since="0 am" &emsp;&emsp;&emsp;     # 查看今日的提交
git log --author="shfshanyue"     # 查看 shfshanyue 的提交
git log --grep="#12"              # 查找提交信息中包换关键字的提交
git log -S "setTimeout"           # 查看提交内容中包换关机子的提交
复制代码

快速定位字符串

如何查找包换关键字的所有文件?

使用 VS Code 能够全局搜索,使用 grep 也能够经过 grep -rn <keyword> 来全局搜索。

不过,它们也会连带搜索忽略文件,好比前端著名的两个文件夹 node_modulespublic(dist/build)。虽然 grep 能够指定 --exclude 来忽略文件,不过 git 来的更方便一些。

这时,可使用 git grep <keyword> 来解决这个问题,另外 ag 也能够解决这个问题。

grep -rn <keyword>
grep -rn <keyword> --exclude config.js --exclude-dir node_modules
git grep <keyword>
ag <keyword>
复制代码

欢迎关注个人公众号山月行,在这里记录着个人技术成长,欢迎交流

欢迎关注公众号山月行,在这里记录个人技术成长,欢迎交流