1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 执行任意Git命令的封装 func RunGitCommand(name string, arg ...string) (string, error) { gitpath := config.Config.Gitpath // 从配置文件中获取当前git仓库的路径 cmd := exec.Command(name, arg...) cmd.Dir = gitpath // 指定工作目录为git仓库目录 //cmd.Stderr = os.Stderr msg, err := cmd.CombinedOutput() // 混合输出stdout+stderr cmd.Run() // 报错时 exit status 1 return string(msg), err } |
下面是一些实际调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 判断当前工作区是否是干净的 // 检查返回值 workspace 是否为空 为空则表明工作区没有未提交的变更 workspace, err := utils.RunGitCommand("git", "status", "--short") // 获取当前工作区的提交码 注意这里没有参数 master commitid, err := utils.RunGitCommand("git", "--no-pager", "log", "-n", "1", "--format=format:%h | %ar") // 输出:8a91fbc | 5 hours ago // 获取git show输出 data.Hash是需要show的提交码hash result, err := utils.RunGitCommand("git", "--no-pager", "show", data.Hash) // 获取最近15次提交信息 注意这里有master gitlog, err := utils.RunGitCommand("git", "--no-pager", "log", "-n", "15", "--format=format:%H|%h|%ar|%ai|%at|%s", "master") // 输出:9e72b098e3a71c2c7f1b9d628dab88c5711a8579|9e72b09|9 weeks ago|2020-07-10 11:35:09 +0800|1594352109|xxxxxxx |
组合使用的一些命令
git status --short #判断当前工作区是否干净
git fetch #获取远端的变更 但不合并到当前工作区
git checkout <commitid> #检出
# 回滚某次提交
git status -short #判断当前工作区是否干净
git revert <commitid> --no-edit #回滚该提交 并生成新的提交
# 正常提交
git add -A
git commit -m "提交信息"
git pull
git push
# 查看某次提交的变更内容
git --no-pager show <commitid>
# 强制回退
git reset --hard HEAD^
git reset --soft HEAD^ #撤回刚刚本地做的提交 回退到上个版本
git reset --hard <commitid> #回退到指定版本
# 显示当前提交码
git rev-parse --short HEAD
# 显示历史记录
git log master 显示整个分支的 git log 仅显示截止当前checkout commit的
git log -n 3 --format=oneline
git --no-pager log -n 30 --format=format:"%H %h %ar %ai %at %s"
输出:19da4d2935c33fb1e340bf07a7fd50190261a2a3 19da4d2 19 minutes ago 2020-09-11 18:25:06 +0800 1599819906 aabbcc
# 查看远端仓库
git remote -v
# 切换分支
git checkout 分支名
# 清空工作区
git clean 参数
-n 显示 将要 删除的 文件 和 目录
-f 删除 文件
-df 删除 文件 和 目录
需要注意git fetch 与 git pull 会有一些不同
git log master 显示整个分支的 git log 仅显示截止当前checkout commit的
转载请注明:轻风博客 » golang调用git命令行指令