Может ли Git напомнить мне или автоматически применить тайник при переключении обратно в соответствующую ветку? - PullRequest
0 голосов
/ 29 октября 2018

Я часто начинаю работать над определенной веткой (например, new-feature) и меня прерывает что-то с более высоким приоритетом (например, high-prio). В большинстве случаев мои изменения в new-feature являются неполными, и поэтому я не хочу делать полный коммит¹, поэтому я git stash произношу их перед проверкой новой high-prio ветви. Это создает новый тайник, который связан с new-feature:

stash@{0}: WIP on new-feature: <sha1 and message of previous commit>

Теперь я могу завершить свою работу на high-prio. После этого я снова извлекаю new-feature и (поскольку это было давно) часто забывает, что с этой веткой был тайник. Это создает проблемы, так как я могу заново выполнить работу, которую я уже выполнил в тайнике, или мне придется объединить / перебазировать эти изменения позже.

Есть ли параметр конфигурации, который напоминает мне о существующем хранилище или, что еще лучше, автоматически вставляет хранилище обратно в мое рабочее дерево после повторной проверки new-feature?

¹ Выполнение "WIP" -Commit и последующее сжатие изменений не является хорошим решением, потому что я хочу всегда синхронизировать origin/new-feature с моим локальным new-feature.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вот трюк, которым я пользуюсь:

В общем, в вашем случае предпочтительнее совершать тайники:

git checkout -b new-feature

// now instead of stash, commit:

git commit -am "Started implementation"

// now move to high priority branch and do the high priority task
 ... 
// done high priority task

git checkout new-feature 
// now this is the important command: it saves your work in index, removes the commit 
from the branch but all the files are preserved  
git reset --soft HEAD~1

// now to see the outcome, execute
git status

Итог, git reset --soft HEAD~1 ваш друг здесь

0 голосов
/ 29 октября 2018

Вы можете использовать git post-checkout hook так:

Добавить следующий текст к .git/hooks/post-checkout

#!/bin/bash
echo "Don't forget to git stash pop the following:"
git stash list

или

#!/bin/bash
branch=$(git branch | sed -n '/\* /s///p')
last_stash_on_branch=$(git stash list --grep="WIP on ${branch}:" | head -1 | cut -d: -f1)
if [[ -n "${last_stash_on_branch}" ]]; then
    git stash pop --index ${last_stash_on_branch}
fi

Сделать его исполняемым

chmod +x .git/hooks/post-checkout

Теперь, когда вы оформляете покупку в любом филиале, ваш скрипт после проверки напомнит вам проверить ваши тайники

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...