本文最后更新于 1482 天前,其中的信息可能已经有所发展或是发生改变。
git clean
之前的文章 git-clean
exclude: 本地的.gitignore
有时候我们在本地创建的文件,不想提交到仓库时,会考虑用.gitignore。
但.gitignore文件本身往往是添加到版本控制的。为了不影响其他协作者。git提供了一个只对本地生效的规则文件
在项目的 .git/info/exclude
文件里编辑即可。规则用法与.gitignore一致。
统计两个commit之间的文件行数增改情况
将以下shell保存为diff_git_commit.sh
git log $1...$2 --pretty=tformat: --numstat | grep -v 'src/proto_lib/' | grep -v 'test/' | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
用法:./diff_git_commit.sh commitId1 commitId2
,当然你也可以用 ./diff_git_commit.sh tag1 tag2
。
你可能注意到了上面的grep -v
。我把不需要统计的文件目录排除了。你可以按需修改以上shell。
文件权限/格式相关(常用于需要与unix协作的win下)
以下命令需要设置为全局时,在 git config 后面加 –global 即可
git config core.filemode false # 忽略文件权限 git config core.autocrlf true # 将所有add到仓库的文本的结束符从crlf替换成lf(unix系统下将true替换成input) git config core.eol lf # 设置行结束符,不过当core.autocrlf设置为true/input时,该配置不生效 git config core.ignorecase false #区分大小写
分支相关
git push origin :branchName # 删除远程分支。其实就是把空分支push上去 git fetch origin --prune # 清除远程没有了,本地却还有的origin分支
Tag
git tag -a tag名 -m "tag描述" # 创建tag git push origin tag名 # 推送指定tag到远程 git tag [-n] [--sort=creatordate] # 列出所有tag,并按创建时间排序 git fetch --tags # 从远程拉取所有tag
彻底将已删除的文件从版本库中清理掉
主要使用 git filter-branch
具体可参照这篇文章《使用git filter-branch删除没有使用的大文件》
Commit相关
git commit –amend # 修改已commit但未提交的评论