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