@@ -437,6 +437,20 @@ function replaceSymbols() {
437437 echo ${VALUE2// _PREHASH_/ ${GIT_PROMPT_SYMBOLS_PREHASH} }
438438}
439439
440+ function createPrivateIndex {
441+ # Create a copy of the index to avoid conflicts with parallel git commands, e.g. git rebase.
442+ local __GIT_INDEX_FILE
443+ local __GIT_INDEX_PRIVATE
444+ if [[ -z " $GIT_INDEX_FILE " ]]; then
445+ __GIT_INDEX_FILE=" $( git rev-parse --git-dir) /index"
446+ else
447+ __GIT_INDEX_FILE=" $GIT_INDEX_FILE "
448+ fi
449+ __GIT_INDEX_PRIVATE=" /tmp/git-index-private$$ "
450+ cp " $__GIT_INDEX_FILE " " $__GIT_INDEX_PRIVATE " 2> /dev/null
451+ echo " $__GIT_INDEX_PRIVATE "
452+ }
453+
440454function updatePrompt() {
441455 local LAST_COMMAND_INDICATOR
442456 local PROMPT_LEADING_SPACE
@@ -456,6 +470,11 @@ function updatePrompt() {
456470 export __GIT_PROMPT_SHOW_UNTRACKED_FILES=${GIT_PROMPT_SHOW_UNTRACKED_FILES}
457471 fi
458472
473+ local GIT_INDEX_PRIVATE=" $( createPrivateIndex) "
474+ # important to define GIT_INDEX_FILE as local: This way it only affects this function (and below) - even with the export afterwards
475+ local GIT_INDEX_FILE
476+ export GIT_INDEX_FILE=" $GIT_INDEX_PRIVATE "
477+
459478 local -a git_status_fields
460479 git_status_fields=($( " $__GIT_STATUS_CMD " 2> /dev/null) )
461480
@@ -528,6 +547,7 @@ function updatePrompt() {
528547 fi
529548
530549 PS1=" ${NEW_PROMPT// _LAST_COMMAND_INDICATOR_/ ${LAST_COMMAND_INDICATOR}${ResetColor} } "
550+ rm " $GIT_INDEX_PRIVATE " 2> /dev/null
531551}
532552
533553# Helper function that returns virtual env information to be set in prompt
0 commit comments