组合git`continue`命令

时间:2018-10-25 11:13:02

标签: git alias

各种各样,我可能需要运行:

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

在每种情况下,我的命令行都提醒我我处于中间位置(rebase / cp / revert),因此我很清楚它知道哪个处于活动状态。

因此,感觉在概念上可能存在一个命令git continue,它将继续执行当前正在执行的任何操作,从而节省了一些乏味的输入?

  • A)该命令是否已经存在(在这种情况下,它是什么,它支持什么?
  • B)如果我这么想,我怎么能自己写这个命令? (也许有别名吗?)

2 个答案:

答案 0 :(得分:3)

据我所知,这样的命令不存在。但是,您可以为此创建一个脚本,例如begin_iterator = buf.begin(); end_iterator = buf.cend(); std::whatever(begin_iterator, end_iterator);

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

答案 1 :(得分:2)

除了@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
  2. echo "No something in progress?",如果什么都没有发生。