Копить только один файл из нескольких файлов, которые были изменены до git 2.13

Очень простой способ для достижения истории активности - с именами классов

определить activity_history_list в вашем mainActivity

public static List<String> activity_history_list;

и в каждом onStart() каждого действия вы создаете (например MainActivity)

 @Override
    public void onStart() {
        super.onStart();

        activity_history_list.add(MainActivity.this.getClass().getSimpleName());
    }

в другом действии (например SettingActivity)

 @Override
        public void onStart() {
            super.onStart();

            MainActivity.activity_history_list.add(SettingActivity.this.getClass().getSimpleName());
        }

Вы можете получить доступ к activity_history_list в любом месте, пока это static, вы можете распечатать всю историю сразу или получить доступ к определенной активности в истории с помощью index

2805
задан xpt 5 March 2019 в 16:04
поделиться

1 ответ

Поскольку git в основном занимается управлением всем содержимым репозитория и индексом (а не одним или несколькими файлами), git stash имеет дело, что неудивительно, со всеми работающими каталог .

Фактически, начиная с Git 2.13 (второй квартал 2017 г.), вы можете хранить отдельные файлы с помощью git stash push :

git stash push [--] [<pathspec>...]

Когда pathspec передается в ' git stash push ', новый тайник записывает измененные состояния только для файлов, которые соответствуют pathspec

Подробнее см. " Тайник изменений в определенных файлах ".

Тестовый пример не требует пояснений:

test_expect_success 'stash with multiple pathspec arguments' '
    >foo &&
    >bar &&
    >extra &&
    git add foo bar extra &&

    git stash push -- foo bar &&   

    test_path_is_missing bar &&
    test_path_is_missing foo &&
    test_path_is_file extra &&

    git stash pop &&
    test_path_is_file foo &&
    test_path_is_file bar &&
    test_path_is_file extra

Исходный ответ (ниже, июнь 2010 г.) заключался в ручном выборе того, что вы хотите спрятать.

Casebash комментарии:

Это (исходное решение stash --patch ) хорошее, но часто я изменял много файлов, поэтому использование патча раздражает

bukzor ответ (проголосовало за ноябрь 2011 г.) предлагает более практичное решение, основанное на
git add + git stash --keep-index .
Посмотрите и проголосуйте за его ответ, который должен быть официальным (вместо моего).

По поводу этой опции chhh указывает на альтернативный рабочий процесс в комментариях:

вы должны " git reset --soft " после такого тайника, чтобы получить четкую постановку назад:
Чтобы вернуться в исходное состояние, которое является чистой промежуточной областью и только с некоторыми избранными неэтапными модификациями, можно мягко сбросить индекс, чтобы получить (не совершая ничего подобного вам - букзор - сделал).


(Исходный ответ, июнь 2010 г.: тайник вручную)

Тем не менее, git stash save --patch может позволить вам добиться частичного хранения, которое вам нужно:

С - patch , вы можете интерактивно выбирать блоки из разницы между HEAD и рабочим деревом, которое нужно сохранить.
Запись в тайнике построена так, что ее состояние индекса совпадает с состоянием индекса вашего репозитория, а ее рабочее дерево содержит только изменения, выбранные вами в интерактивном режиме. Затем выбранные изменения откатываются от вашего рабочего дерева.

Однако при этом будет сохранен полный индекс (который может быть не тем, что вам нужно, поскольку он может включать другие уже проиндексированные файлы) и частичное рабочее дерево (которое может выглядеть как то, которое вы хотите спрятать).

git stash --patch --no-keep-index

может быть лучше.


Если - patch не работает, ручной процесс может:

Для одного или нескольких файлов промежуточным решением было бы:

  • скопировать их за пределы репозитория Git
    (На самом деле eleotlecram предлагает интересную альтернативу )
  • git stash
  • скопируйте их обратно
  • git stash # на этот раз, только те файлы, которые вам нужны stashed
  • git stash pop stash @ {1} # повторно применить все изменения ваших файлов
  • git checkout - afile # сбросить файл до содержимого HEAD перед любыми локальными изменениями

В конце этого довольно громоздкого процесса у вас останется только один или несколько файлов.

401
ответ дан 22 November 2019 в 19:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: