组合git `continue`命令

2vuwiymt  于 2023-10-14  发布在  Git
关注(0)|答案(3)|浏览(123)

我可能需要运行以下几种方法:

  • git rebase --continue
  • git cherry-pick --continue
  • git revert --continue

在每种情况下,我的命令行都在提醒我,我正在执行mid-(rebase/cp/revert),所以我很清楚它知道哪一个是活动的。
因此,感觉就像在概念上可以有一个命令git continue,它将继续当前活动的任何操作,从而节省一些繁琐的输入?

  • A)这个命令是否已经存在(在这种情况下,它是什么,它支持什么?
  • B)如果我有这个倾向,我怎么能自己写这个命令呢?(也许是化名。)
4si2a6ki

4si2a6ki1#

除了@alfunx的回答,我可能会建议这样的改变:
我没有执行repo_path=$(git rev-parse --git-dir 2>/dev/null),这样git的返回代码和日志就被忽略了,我把脚本改为:

#!/usr/bin/env bash

repo_path=$(git rev-parse --git-dir)

if [ $? -ne 0 ]; then
    exit $?
fi

if [ -d "${repo_path}/rebase-merge" ]; then
    git rebase --continue
elif [ -d "${repo_path}/rebase-apply" ]; then
    git rebase --continue
elif [ -f "${repo_path}/MERGE_HEAD" ]; then
    git merge --continue
elif [ -f "${repo_path}/CHERRY_PICK_HEAD" ]; then
    git cherry-pick --continue
elif [ -f "${repo_path}/REVERT_HEAD" ]; then
    git revert --continue
else
    echo "No something in progress?"
fi

这个剧本
1.返回相应的退出代码(例如,128不是git仓库等)和git二进制本身的错误消息(如fatal: not a git repository (or any of the parent directories): .git

  1. echo "No something in progress?"如果没有发生什么事。
zi8p0yeb

zi8p0yeb2#

这样的命令不存在,据我所知。但是,您可以为此创建一个脚本,称为例如。git-continue

#!/usr/bin/env bash

repo_path=$(git rev-parse --git-dir 2>/dev/null)

if [ -d "${repo_path}/rebase-merge" ]; then
    git rebase --continue
elif [ -d "${repo_path}/rebase-apply" ]; then
    git rebase --continue
elif [ -f "${repo_path}/MERGE_HEAD" ]; then
    git merge --continue
elif [ -f "${repo_path}/CHERRY_PICK_HEAD" ]; then
    git cherry-pick --continue
elif [ -f "${repo_path}/REVERT_HEAD" ]; then
    git revert --continue
fi

将脚本放在$PATH中的某个地方,然后就可以使用git continue了。
请注意,还有类似的标志,如--continue,例如--abort--skip--quit,您可能也想涵盖这些标志。

kpbwa7wx

kpbwa7wx3#

如果你想把它作为一个powershell函数,这里是:

# Continues the ongoing git operation.
function git-continue {
    $repoPath = git rev-parse --git-dir

    if ($LASTEXITCODE -ne 0) {
        exit $LASTEXITCODE
    }

    if (Test-Path -Path (Join-Path $repoPath "rebase-merge") -PathType Container) {
        git rebase --continue
    }
    elseif (Test-Path -Path (Join-Path $repoPath "rebase-apply") -PathType Container) {
        git rebase --continue
    }
    elseif (Test-Path -Path (Join-Path $repoPath "MERGE_HEAD") -PathType Leaf) {
        git merge --continue
    }
    elseif (Test-Path -Path (Join-Path $repoPath "CHERRY_PICK_HEAD") -PathType Leaf) {
        git cherry-pick --continue
    }
    elseif (Test-Path -Path (Join-Path $repoPath "REVERT_HEAD") -PathType Leaf) {
        git revert --continue
    }
    else {
        Write-Host "fatal: No operation in progress?"
    }
}

可以使用以下命令将其设置为别名:
git config --global alias.continue "!pwsh -command 'git-continue'"
来自@ik1ne的回答

相关问题