2015-09-07 2 views
1

Во время интерактивной переадресации, я часто нахожу, что хочу внести некоторые изменения, которые появляются перед текущим набором изменений, например. если у меня есть:Как git stash только поэтапные файлы?

A->BCD->E 

Я хочу, чтобы перейти к:

A->D->BC->E 

Так что я интерактивный перебазироваться и редактировать соответствующую ревизию. Так что я хотел бы быть в состоянии:

  1. reset --soft
  2. фиксации BCD
  3. D
  4. убрать из буфера
  5. копить стадийности изменения
  6. фиксации D
  7. поп притон
  8. совершить

Это p ossible, или есть более простой способ достичь этого?

ответ

0

Я задал вопрос об официальном списке рассылки git, но не получил реального ответа. http://git.661346.n2.nabble.com/Proposal-for-git-stash-add-staged-option-td7629171.html

Вот что я использую сейчас:

Это позволяет сделать git cstash "optional message", который будет копить все ваши staged файлы в притон. Он обрабатывает как грязные, так и чистые состояния.

#/bin/sh 
# 
function evil_git_dirty { 
    [[ $(git diff --shortstat 2> /dev/null | tail -n1) != "" ]] && echo "dirty" || echo "clean" 
} 

function create_stash { 
    # And convert into a stash 
    if [ "$1" == "" ] 
    then 
     # Unnamed stash 
     git stash 
    else 
     # Named stash 
     git stash save "$1" 
    fi 
} 

IS_DIRTY=$(evil_git_dirty) 

echo "$IS_DIRTY" 

if [ "$IS_DIRTY" == "clean" ] 
then 
    create_stash "$1" 
    exit 0 
fi 

# Put staged files in a tempory commit 
git commit -m 'temporary, will be stashed soon' --no-verify 
# Put everything else in a temporary stash 
git add . 
git stash 
# Remove commit 
git reset HEAD^1 

git add . 

create_stash "$1" 
# Pop the temporary stash 
git stash pop [email protected]{1} 
git reset . 
+0

Я не читал весь сценарий, но на меня бросаются две вещи. 1) Хотя ваш shebang указывает 'sh', вы используете базисы, такие как' [['. 2) '[-z" $ 1 "]' более идиоматичен, чем '['$ 1" == ""] '. – Jubobs

Смежные вопросы