- 发布于
Git常用命令整理
- Authors
- Name
- 田中原
Git
目录
config相关
显示所有的配置
git config --list
git config -l
添加全局配置
git config --global user.name name
git config --global user.email [email protected]
为本地的工程里面添加单独的配置,可以使用不同的用户名和密码
git config --local [user.name](http://user.name) xxx
git config --local user.email [[email protected]](mailto:[email protected])
mac下全局配置的路径
~/.gitconfig
local配置的路径
$Project_dir/.git/configx
tag相关
# 查看所有tag
git tag
# 切换到某个tag
git checkout tag_name
# tag无法编辑,如果想基于tag编辑需要切换出一个新分支
git checkout -b branch_name tag_name
给分支添加备注
# 给分支写备注
git config branch.<branchName>.description <message>
# 获取当前分支的备注
git config branch.<branchName>.description
清空本地不存在的远端分支
git remote prune origin
git fetch -p origin
git clone depth=1
时切换分支
git clone --depth 1 https://github.com/xxxxxxx.git
git remote set-branches origin 'remote_branch_name'
git fetch --depth 1 origin remote_branch_name
git checkout remote_branch_name
cherry-pick 将某次提交应用到另一分支上
git checkout a
# 将b分支的最新提交应用到a分支上
git cherry-pick b
# 或通过hash提交,可用多个hash
git cherry-pick <commitHash>
git cherry-pick <commitHash> <commitHash>
git cherry-pick 75f9991a9ae28ff396c5bbbaa55fa7c401707724 c42a39af542092aa25b54b0202e0b78859a928f2
# 转移连续的提交 (包右不包左)
git cherry-pick <commitHash>...<commitHash>
# 包含到A
git cherry-pick A^..B
rebase
# 继续
git rebase --continue
# 如果想放弃当前操作
git rebase --abort
fetch
# 拉取一定层级的记录
git fetch --depth=1
# 获取全部提交
git fetch --unshallow
设置git命令别名
git config --global alias.desc branch.develop-fusion-model-tags.description
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.cp cherry-pick
git config --global alias.unstage 'reset HEAD'
# 可用git pull -r代替
git config --global alias.fr '!f() { git fetch && git rebase $@; }; f';
# git提交日志
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset - %Cgreen(%cd)%C(yellow)%d%Creset %s %C(blue)[%an/%cn]%Creset' --date=format:'%Y-%m-%d %H:%M:%S' --abbrev-commit"
删除git别名
git config --global --unset alias.xxx
设置git分支描述alias
git config --global --add alias.about '!describe() { msg="$1"; git config branch."$(git rev-parse --abbrev-ref HEAD)".description ${msg:+"$msg"}; }; describe'
通过bash设置别名获取分支信息
Step 1:
vi ~/.bashrc
Step 2: Put this
alias git-describe-branches='for line in $(git branch); do
description=$(git config branch.$line.description)
if [ -n "$description" ]; then
echo "$line $description"
fi
done'
Step 3:
source ~/.bashrc
Step 4:
git-describe-branches
OR
for line in $(git branch); do
description=$(git config branch.$line.description)
if [ -n "$description" ]; then
echo "$line $description"
fi
done
统计
统计仓库提交top5
# 查看仓库提交者排名前 5
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
统计每个人增删行数
# 统计每个人增删行数
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --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 }' -; done
获上周自己的提交历史
#!/bin/bash
function isMacOS() {
# Mac下date命令式BSD(Berkeley Software Distribution)系的,
# Linux 下date命令式GNU(GNU’s Not Unix)系,二者用法有一些区别。
# BSD并不是特指定任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称。
# Mac OS X 和 iOS实际上基于 Darwin,Darwin是BSD其中一个分支。
uNames=$(uname -s)
osName=${uNames: 0: 4}
if [ "$osName" == "Darw" ] # Darwin, AKA "Mac OS X"
then
echo 0
elif [ "$osName" == "Linu" ] # Linux, AKA "GNU/Linux"
then
echo 1
elif [ "$osName" == "MING" ] # MINGW, windows, git-bash
then
echo 2
else
echo 3
fi
}
is_mac=$(isMacOS)
author_name=$(git config -l|grep user.name=|cut -c11-)
if [ -z "$author_name" ]; then
echo "[ERR]: Can not determine username for git, please check user.name"
exit 1
fi
now_date=$(date +%Y-%m-%d)
if [ "$is_mac" ];
then
# Mac , 通过-v参数,-v-1d 代表前一天,-v-1y代表上一年
last_week=$(date -v-7d +%Y-%m-%d)
else
# Linux,通过–date参数实线,–date=“-1 day” 代表前一天, –date=“-1 year” 代表上一年
last_week=$(date -date="-7 day" +%Y-%m-%d)
fi
git log --oneline --since="$last_week" --until="$now_date" --author="$author_name" | awk '{ print $2$3}'
.gitignore配置文件
配置文件规则
- #为注释
- *.[oa] //忽略后缀为.o .a
- *.[oa] !my.a //忽略后缀为.o .a,my.a除外
- abc //忽略abc文件和abc目录
- adb/ //只忽略abc目录不忽略abc文件
- abc !adb/ //只忽略abc文件不忽略abc目录
- /dbg //只忽略当前文件下的dbg文件和目录,子目录的不忽略
ignore配置不生效的问题
在开发过程中经常会有需要将已经追踪过的文件添加为忽略文件,但是直接配置.gitignore文件是不会生效的。这时候需要先把本地缓存删除然后再提交
git rm -r --cached .
强制添加已被忽略文件
想要添加文件到Git但是已经被忽略的,可以通过-f
强制添加到Git
git add -f filename
检查配置是由哪个配置忽略掉的
或者想修改.gitignore
规则,可以使用git check-ignore
命令检查当前文件是被.gitingore
哪里的配置忽略掉的
git check-ignore -v filename