Git и работает над несколькими ветвями

У меня есть пара ветвей Git: "экспериментальный", "что-то" и "мастер".

Я переключился на "экспериментальную" ветвь. Я заметил ошибку, которая не связана с "экспериментальной" и относится к изменениям, которые были сделаны в "чем-то". Как его исправить?

Я думаю, что я должен переключиться на "что-то", исправить ошибку, зафиксировать, а затем вернуться к "экспериментальному". Как я должен принять незначительное изменение от "чего-то" и применить его как к "хозяину", так и "экспериментальному", так что мне не нужно снова исправлять ошибку, когда я переключаюсь на эти ветки?

Ответ 1

Уже не упоминаются два решения, которые вы можете использовать: используйте ветку topic или используйте выбор вишни.


Решение отраслевой ветки

В разделе ветки решение, вы переключитесь на ветку "что-то" , создайте ветку, чтобы исправить ошибку, например. "something-bugfix", объединить эту ветвь в "что-то" (исправление ошибки), а затем объединить эту ветвь в "экспериментальную".

$ git checkout -b something-fix something
[edit, commit]
$ git checkout something
$ git merge something-fix
$ git checkout experimental
$ git merge something-fix
[fix conflicts if necessary and commit]

См. также Устранение конфликтов/зависимостей между ветвями тем раньше и Никогда не слияние назад, и, возможно, также Фиксировать в другой ветке сообщения блога от Юнио С Хамано (git сопровождающий).


Черри-выбор ошибки bugfix

Решение выбора вишни полезно, если позже вы заметили, что исправление, которое вы создали (например, в ветки развития), было бы полезно также на другой ветке (например, стабильной ветке). В вашем случае вы отправите исправление в ветку "что-то" :

$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental

Затем вы заметили, что исправление, которое вы отправили в ветке "что-то" , должно быть также на ветке "experise". Предположим, что это исправление было зафиксировано "A" (например, "что-то" , если вы ничего не делали поверх "чего-то", но это может быть, например, "что-то" 2 или "c84fb911" ):

$ git checkout experimental
$ git cherry-pick A

(вы можете использовать опцию --edit для git cherry-pick, если вы хотите отредактировать сообщение фиксации, прежде чем приступать к ошибке, полученной с помощью вишни).

Ответ 2

вы можете:

  • stash или commit изменения, которые вы использовали в ветке experimental
  • checkout something
  • (необязательно) bisect, чтобы найти ошибку
  • commit изменения
  • checkout experimental

а затем:

  • rebase something, если вам нужен чистый график фиксации (если вы выставляете этот репозиторий, и вам это интересно)

или

  • merge something, если вам не нравится "презентация":)

Ответ 3

так как ваш экспериментальный ветвь имеет функции от что-то, вы должны сделать одно из:

  • объединить что-то в экспериментальный после исправления там ошибки.
  • переустановите экспериментальный поверх что-то

Ответ 4

Если вы слишком много не продвигаетесь в 'master', просто переключитесь на экспериментальный и выполните git master merge. Если вы это сделаете, я думаю, что команда git cherry-pick '- ваш друг.

Ответ 5

Ваши ветки как-то связаны следующим образом:

мастеp > что-то > экспериментальный

Это, если вы действительно собираетесь объединить что-то в мастер.

Я бы мог, по возможности, исправить его поверх мастера, а затем переустановить остальные поверх мастера. Но мне просто нравится перезагрузка. Или вы можете исправить его там, а затем слиться именно так.

мастеp > что-то > экспериментальный

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

Ответ 6

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