Действительно ли возможно задним числом превратить ряд фиксаций в ответвление?

Вот версия Generics для массивов:

import java.util.Random;

public class Shuffle<T> {

    private final Random rnd;

    public Shuffle() {
        rnd = new Random();
    }

    /**
     * Fisher–Yates shuffle.
     */
    public void shuffle(T[] ar) {
        for (int i = ar.length - 1; i > 0; i--) {
            int index = rnd.nextInt(i + 1);
            T a = ar[index];
            ar[index] = ar[i];
            ar[i] = a;
        }
    }
}

Учитывая, что ArrayList - это в основном просто массив, может быть целесообразно работать с ArrayList вместо явного массива и использовать Collections.shuffle ( ). Однако тесты производительности не показывают существенной разницы между приведенными выше и Collections.sort ():

Shuffe<Integer>.shuffle(...) performance: 576084 shuffles per second
Collections.shuffle(ArrayList<Integer>) performance: 629400 shuffles per second
MathArrays.shuffle(int[]) performance: 53062 shuffles per second

Реализация Apache Commons MathArrays.shuffle ограничена int [], и, вероятно, к используемому генератору случайных чисел.

40
задан Otto 13 December 2008 в 16:31
поделиться

3 ответа

Конечно, Вы можете. (С Мерзавцем там isn’t очень, чем Вы can’t делают так или иначе.:)

git checkout -b new-branch hash-of-A
git cherry-pick hash-of-A1
git cherry-pick hash-of-A2

Это создаст новое ответвление, начинающее с фиксации A. Впоследствии Вы возвращаетесь к той же фиксации снова, создавая другое ответвление:

git checkout -b new-branch2 hash-of-A
git cherry-pick hash-of-B
git cherry-pick hash-of-C
git cherry-pick hash-of-D
git cherry-pick hash-of-E
git merge new-branch

Теперь просто необходимо объединиться new-branch и new-branch2 для получения структуры, Вы хотите и отбрасываете свое старое ответвление.

, Конечно, то, что Dustin сказал все еще, содержит: хеши фиксаций изменятся так, необходимо только сделать это haven’t при публикации изменений уже.

19
ответ дан Bombe 23 September 2019 в 16:03
поделиться

Вы не можете сделать этого прозрачно, потому что хеши должны будут измениться, но Вы в основном просто нуждаетесь главе филиала и повторно основываете-i оба ответвления для отменения соответствующих изменений.

6
ответ дан Dustin 23 September 2019 в 16:03
поделиться

То, что Вы хотите сделать, к на самом деле перезапись история. Идентификаторы фиксаций изменились бы, и в некоторых случаях changeset, данный фиксациями, изменится. Таким образом, если существует шанс, что кто-то, возможно, основывал работу над старой версией ответвления, Вы хотите измениться, лучше не сделать это. Но если Вы не опубликовали это ответвление, не стесняться.

Позволяют нам предположить, что ответвление, которое мы хотим изменить, называют 'ведущим устройством', и что точку, где мы хотим запустить новое ответвление, называют (в данном примере одно из имен, которые можно использовать, 'master~6').

Первый, позволяет, создают новое ответвление из фиксации, давайте назовем его, 'фиксирует'

$ git checkout -b fixes A

, Это также сделало бы ответвление, 'фиксирует' текущий. Поскольку существует только несколько фиксаций, которых мы хотим не избирательно подойти к выбору, мы можем избирательно подойти к выбору их на ответвлении, 'фиксирует':

$ git cherry-pick A1
$ git cherry-pick A2

Тогда мы хотим удалить фиксации 'A1' и 'A2' от ответвления 'ведущее устройство'. Поскольку существует только несколько фиксаций, которые мы хотим удалить, и возможно намного больше мы хотим сохранить, мы, eould используют 'перебазу мерзавцев - интерактивный' для этого:

$ git rebase -i fixes master

редактор будет разожжен со всеми фиксациями в 'ведущем устройстве' после фиксации (который является общей фиксацией т.е. основой слияния ответвления 'ведущее устройство', и ответвление 'фиксирует'). Список был бы похож на это:

pick deadbee B
pick fa1afe1 C
pick a98d4ba A1
...

Удаляют строки с фиксациями 'A1' и 'A2', сохраняют изменения, закрывают редактора (или иначе отправляют изменения в переоснове inetractive) и мерзавец повторно применил бы все фиксации кроме тех, которые Вы удалили.

Тогда можно завершить с [1 112]

$ git merge fixes

(переоснова мерзавца оставила нас на переписанном ответвлении 'ведущим устройством').

1
ответ дан Jakub Narębski 23 September 2019 в 16:03
поделиться
Другие вопросы по тегам:

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