分享一个 git 缩写脚本
git 简写命令, 加入 linux,mac 别名
使用方法:
./gsh [命令名] [参数, 可选]
set 设置用户名和邮箱, 1: 名称, 2: 邮箱
init 设置 git 简洁命令
gst: 代码变化状态,git status
gd: 查看当前代码改动变化, git diff, git diff 分支 1 分支 2
gam: [gam 备注] 代码提交本地仓库: git commit -am “ 备注 ”
gpu: [gpu 远程分支名] 与远程仓库关联: git push -u origin 分支名
gp: [gp] 推送到远程仓库: git push
gl: [gl]拉取远程仓库代码:git pull
gb: [gb 新分支名]创建并切换新分支:git checkout -b 新分支名
gm: [gm 分支名] 合并分支: git merge 分支名
gcm: [gcm 目标分支名] 切换分支, 并更新, 再合并: git checkout 分支名 B && git pull && git merge 分支名 A
gsave 保存临时修改文件, git stash save
gpop 恢复临时修改的文件,git stash pop
glg 查看 git 日志.git log
#!/usr/bin/env bash
#
#
#
# __----~~~~~~~~~~~------___
# . . ~~//====...... __--~ ~~
# -. \_|// |||\\ ~~~~~~::::... /~
# ___-==_ _-~o~ \/ ||| \\ _/~~-
# __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~
# _-~~ .=~ | \\-_ '-~7 /- / || \ /
# .~ .~ | \\ -_ / /- / || \ /
# / ____ / | \\ ~-_/ /|- _/ .|| \ /
# |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\
# ' ~-| /| |-~\~~ __--~~
# |-~~-_/ | | ~\_ _-~ /\
# / \ \__ \/~ \__
# _--~ _/ | .-~~____--~-/ ~~==.
# ((->/~ '.|||' -_| ~~-/ , . _||
# -_ ~\ ~~---l__i__i__i--~~_/
# _-~-__ ~) \--______________--~~
# //.-~~~-~_--~- |-------~~~~~~~~
# //.-~~~--\
# 神龙保佑
# 代码无 BUG!
#
###########################################################################################################
# git 简写命令, 加入 linux,mac 别名
#
# 使用方法:
# ./gsh [命令名] [参数, 可选]
#
# set 设置用户名和邮箱, 1: 名称, 2: 邮箱
# init 设置 git 简洁命令
#
# gst: 代码变化状态,git status
# gd: 查看当前代码改动变化, git diff, git diff 分支 1 分支 2
# gam: [gam 备注] 代码提交本地仓库: git commit -am "备注"
# gpu: [gpu 远程分支名] 与远程仓库关联: git push -u origin 分支名
# gp: [gp]推送到远程仓库: git push
# gl: [gl]拉取远程仓库代码:git pull
# gb: [gb 新分支名]创建并切换新分支:git checkout -b 新分支名
# gm: [gm 分支名]合并分支: git merge 分支名
# gcm: [gcm 目标分支名]切换分支, 并更新, 再合并: git checkout 分支名 B && git pull && git merge 分支名 A
# gsave 保存临时修改文件, git stash save
# gpop 恢复临时修改的文件,git stash pop
# glg 查看 git 日志.git log
#
#
# 编辑时间: 2019-05-24, 作者: 百里, 小站: sgfoot.com, bbs.sgfoot.com
###############################################################################################################
cate=$1 #操作名称
second=$2 # 第 1 个参数
third=$3 # 第 2 个参数
#默认值
default_name="百里"
default_email="sgfoot2020@gmail.com"
# 定义变量
tmp_file=/tmp/git.branch
# 获取分支名
function git.branch {
br=`git branch | grep "*"`
touch /tmp/git.branch
echo ${br/* /} > $tmp_file
}
# 初使值
function git.init {
git config --global alias.st status
git config --global alias.df diff
git config --global alias.co checkout
git config --global alias.cb 'checkout -b'
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.mg merge
git config --global alias.save 'stash save'
git config --global alias.pop 'stash pop'
git config --global alias.un 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'--abbrev-commit"
git config -l
}
# 显示执行状态
function showStatus {if [ $? -eq 0];then
echo "执行成功"
else
echo "执行失败"
fi
}
# 显示最近 1 次提交详情
function showLast {
count=$1
show_count=${count:-1}
git log -$show_count --stat --graph --oneline --relative-date --abbrev-commit -p --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
}
# 简洁方式显示日志
function showLog {git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
}
#对 zsh 进行别名新建
function create_zshrc {
#复制当前脚本 到 /usr/local/sbin 里
gsh_file=/usr/local/sbin/gsh
basepath=$(cd `dirname $0`; pwd)
filename=$(basename $0)
gsh=${basepath}/${filename}
git_alias=~/.zshrc
#check
is=`cat $git_alias |grep "alias gst"`
if [-n "$is"];then
echo "已经安装过"
exit 0
fi
echo "alias gst='$gsh gst'" >> $git_alias
echo "alias gam='$gsh gam'" >> $git_alias
echo "alias gd='$gsh gd'" >> $git_alias
echo "alias gpu='$gsh gpu'" >> $git_alias
echo "alias gp='$gsh gp'" >> $git_alias
echo "alias gl='$gsh gl'" >> $git_alias
echo "alias gb='$gsh gb'" >> $git_alias
echo "alias gm='$gsh gm'" >> $git_alias
echo "alias gcm='$gsh gcm'" >> $git_alias
echo "alias gsave='$gsh gsave'" >> $git_alias
echo "alias gpop='$gsh gpop'" >> $git_alias
echo "alias glg='$gsh glg'" >> $git_alias
echo "alias gset='$gsh gset'" >> $git_alias
}
#对.bash_profile 进行别名新建
function create_profile {
#复制当前脚本 到 /usr/local/sbin 里
gsh_file=/usr/local/sbin/gsh
basepath=$(cd `dirname $0`; pwd)
filename=$(basename $0)
gsh=${basepath}/${filename}
git_alias=~/.bash_profile
#check
is=`cat $git_alias |grep "alias gst"`
if [-n "$is"];then
echo "已经安装过"
exit 0
fi
echo "alias gst='$gsh gst'" >> $git_alias
echo "alias gam='$gsh gam'" >> $git_alias
echo "alias gd='$gsh gd'" >> $git_alias
echo "alias gpu='$gsh gpu'" >> $git_alias
echo "alias gp='$gsh gp'" >> $git_alias
echo "alias gl='$gsh gl'" >> $git_alias
echo "alias gb='$gsh gb'" >> $git_alias
echo "alias gm='$gsh gm'" >> $git_alias
echo "alias gcm='$gsh gcm'" >> $git_alias
echo "alias gsave='$gsh gsave'" >> $git_alias
echo "alias gpop='$gsh gpop'" >> $git_alias
echo "alias glg='$gsh glg'" >> $git_alias
echo "alias gset='$gsh gset'" >> $git_alias
}
help() {if [ "$1" = "h"];then
echo $2
exit 0
fi
}
# case 进行操作
case $cate in
create) # 创建文件
if [$2 -eq 1];then
echo "对 bash_profile 进行别名新建"
create_profile && showStatus
else
echo "对 zshrc 进行别名新建"
create_zshrc && showStatus
fi
;;
init) #初使化
echo "正在初使 git 简洁命令"
git.init && showStatus
;;
set)
help $second "正在设置 git 提交的用户名和邮箱地址"
echo "正在设置 git 提交的用户名和邮箱地址"
git config --global user.name $second
git config --globaluser.email $third
showStatus
;;
my)
help $second "正在设置 git 提交的用户名和邮箱地址"
echo "正在设置 git 提交的用户名和邮箱地址"
git config user.name $default_name
git config user.email $default_email
showStatus
;;
gst) # 查看状态
git status && echo $?
;;
gf) # 对比变化, 支持版本对比, 例 gf 需要对比的分支名(注: 绿色字体是添加的代码, 红色是删除的代码)
if ["$second" = "h"];then
echo "对比变化, 支持版本对比, 例 gf 需要对比的分支名(注: 绿色字体是添加的代码, 红色是删除的代码)"
exit 0
fi
if [-n "$second"];then
git.branch
local_branch=`cat $tmp_file`
git diff $second $local_branch
else
git diff
fi
;;
gam) # 添加, 提交代码到本地
if [-z "$second"];then
echo "请写上你精彩的备注, 如: 这是一代牛逼烘烘的代码!!!, 代号:(nb)"
exit 0
fi
if ["$second" = "nb"];then
second="fix:TODO This is nb code"
fi
git add -A && git commit -m "$second" && showLast && showStatus
;;
gpu) # 提交代码远程并关联远程仓库
git push -u origin $second && showStatus
;;
gp) # 提交代码到远程
if [-n "$second"];then
git push origin $second && showStatus
else
git push && showStatus
fi
;;
gl) # 拉取代码
if [-n "$second"];then
git pull origin $second && showStatus
else
git pull && showStatus
fi
;;
gb) # 创建并切换新分支
git checkout -b $second && showStatus
;;
gm) # 合并代码
if [-z "$second"];then
git.branch
current_branch=`cat $tmp_file`
echo "请填写需要合并的分支名称,eg: 如填写 A 分支名, Usage: git merge A , 代表 A 分支合并到 $current_branch"
exit 0
fi
git merge $second && showStatus
;;
gcm) # 切换分支, 并合并代码
if [-z "$second"];then
echo "请跟上需要合并的分支名称"
exit 0
fi
git.branch
old_branch=`cat $tmp_file`
git checkout $second && git pull && git merge $old_branch && git push && git checkout $old_branch && showStatus
;;
glg) # 简洁方式查看日志
showLog
;;
gg) # 查看日志哪些文件被改变
git log --graph --stat --color --abbrev-commit --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
;;
gcode) # 查看日志修改的具体的代码
git log --stat --graph --oneline --relative-date --abbrev-commit -p --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
;;
gsave) # 暂存项目修改
git stash save && showStatus
;;
gpop) # 取出暂存的数据
git stash pop && showStatus
;;
*)
echo "Usage $0 {init|set| gst|gam|gpu|gp|gl|gb|gm|gcm|glg|gg|gcode|gsave|gpop}"
exit 1
;;
esac