Новая ветка от Git Stash повлияет на другие тайники? - PullRequest
1 голос
/ 05 июля 2019

У меня есть основная ветвь, в которой я спрятал несколько изменений, и теперь я хочу создать новую ветвь из спрятанных изменений, которые находятся в {0}.Но я сомневаюсь, что создание новой ветви не повлияет на другие мои тайники, потому что git сбросит мой тайник после создания новой ветки.Будет ли git сбрасывать тайники только с индексом {0} или будут сбрасываться все тайники?Спрятанные изменения для меня слишком важны.

1 Ответ

1 голос
/ 05 июля 2019

Краткий ответ : Не беспокойтесь, тайники не зависят друг от друга. Перейти на это.


Тематическое исследование с визуальным представлением

Чтобы лучше представить, тайник можно рассматривать как список не связанных коммитов, каждый из которых указывает на разные точки в дереве репо.

См. Гипотетическая ситуация ниже

        F---G <<< feature/abc
       /
      /           H---I <<< bugfix/123
     /           /     \
A---B---C---D---E---F---J <<< master
         \
          \
           K---L---M <<< feature/xyz

и следующий Гипотетический сценарий

Вы спрятали изменения несколько раз за последние пару дней, пока работали над этими разными ветками.

Допустим, вы прятались три раза:

  • один раз на feature/abc во время вашей первой попытки совершения G, потому что вы вообще не были удовлетворены своим первым подходом, но хотели на всякий случай держать его под рукой.

  • были прерваны во время работы над исправлением / 123, немного позже после фиксации H, и пришлось переключать ветки Позже вы вернулись к bugfix/123, а затем сделали git stash apply вместо git stash pop, чтобы сохранить запись в тайнике для последующего повторного использования / проверки.

и наконец

  • пришлось снова копить после L при работе на feature/xyz

(Операции происходили в таком порядке.)

Результирующая ситуация с тайником

На этом этапе ваш список тайников будет выглядеть как

stash@{0}: WIP on feature/xyz: f1d6b3a unfinished - get rid of var dumps
stash@{1}: WIP on hotfix/123: 94722ae unfinished - css still broken
stash@{2}: WIP on feature/abc: 4fb4785 no good - test T1 failed

но важным моментом является то, что, поскольку запись в тайнике принимает для родителя то, на что указывает коммит HEAD, когда выполняется запись:

L является родителем f1d6b3a (назовем его L')
H является родителем 94722ae (назовем его H')
F является родителем 4fb4785 (назовем его F')

который в дереве можно изобразить как

          F' <<< stash@{2}
         /
        F---G <<< feature/abc      H' <<< stash@{1}
       /                          / 
      /                          H---I <<< bugfix/123
     /                          /     \
A---B---C---D------------------E---F---J <<< master
         \
          \
           K---L---M <<< feature/xyz
                \
                 L' <<< stash@{0}

Тогда гораздо легче увидеть, что, хотя они перечислены в вашем stash list последовательно, на самом деле они не связаны.

...