在git命令行中显示合并状态的方法

时间:2014-07-11 05:31:36

标签: git bash command-line .bash-profile

我目前有git配置为使用以下bash脚本显示我所在的分支(以及我的命令行以显示我所在的目录):

export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\] \[\033[33;1m\]\w\[\033[m\] (\$(git branch 2>/dev/null | grep '^*' | colrm 1 2)) \$  \n$ "
export PS2="$ "

我想知道是否有一种方法可以显示“合并”状态,这样当我合并时它也会在命令行中显示merging(在我之后的分支之后)。我在其他地方看过这个,所以我很确定它是可能的,但不知道如何。

2 个答案:

答案 0 :(得分:4)

您可以在this git-ps1脚本中看到更完整的状态指示器,其中包含rebase并合并。

local g="$(git rev-parse --git-dir 2>/dev/null)"
if [ -n "$g" ]; then
  local r
  local b
  if [ -d "$g/rebase-apply" ]
  then
    if test -f "$g/rebase-apply/rebasing"
    then
      r="|REBASE"
    elif test -f "$g/rebase-apply/applying"
    then
      r="|AM"
    else
      r="|AM/REBASE"
    fi
    b="$(git symbolic-ref HEAD 2>/dev/null)"
  elif [ -f "$g/rebase-merge/interactive" ]
  then
    r="|REBASE-i"
    b="$(cat "$g/rebase-merge/head-name")"
  elif [ -d "$g/rebase-merge" ]
  then
    r="|REBASE-m"
    b="$(cat "$g/rebase-merge/head-name")"
  elif [ -f "$g/MERGE_HEAD" ]
  then
    r="|MERGING"
    b="$(git symbolic-ref HEAD 2>/dev/null)"

对于合并部分,它确实测试了MERGE_HEAD文件,suggestedZeeker

答案 1 :(得分:1)

正如@Zeeker建议的那样,你基本上可以有类似的东西:

PS1='$([[ -e .git/MERGE_HEAD ]] && echo "merging ")\$ '

或者

PS1="\$([[ -e .git/MERGE_HEAD ]] && echo 'merging ')\\\$ "

您可以将其与当前的PS1合并;自定义echo merging或使用printf生成ANSI代码。