Изолировать изменения git от одной ветви к другой с помощью определенного коммита - PullRequest
0 голосов
/ 14 февраля 2019

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

В нашем репозитории git есть текущая настройка:

Master  - C1           
 \         \ 
  \      Release1 - C1
   \        
Develop - C1 - C2 - C3 - C4 - C5 - C6

Мы разработали приложение, созданное из Master в какой-то момент времени вместе с первым релизом, и все на одном уровне фиксации.Develop затем получает непрерывный поток коммитов, некоторые из которых проходят тестирование, а некоторые нет.Как мы можем индивидуально переместить определенные коммиты из Develop в Release1?

Что-то вроде этого:

Master  - C1 -   -    -    -    -  Master
 \         \                        /
  \      Release1 - C1 - C3 - C5 - C2 
   \        
Develop - C1 - C2 - C3 - C4 - C5 - C6 - C7 - C8 - C9

Я пробовал Cherry Pick на C3, например, но он приносит C2 с ним.Любая помощь будет принята с благодарностью.

Редактировать: Из комментариев здесь шаги и вывод.Я пытаюсь выбрать один или два коммита и всегда получаю один и тот же результат.Я делаю это неправильно?

 ~/git/cherrypick_test (Develop)
$ git log
commit 9d296fb748731c9252b55bcb52a14d2638112bd1 (HEAD -> Develop, origin/Develop)
         Change3 123
commit 3e01cdf9d11043fd58e4684742a3f69ee350b037
         Change 125
commit 62ab4c96a767113d22fb2f78d20b6d72587fff86
         Change 124
commit c28ce2ea753611f5f5b559f4f6598b2584f3e2f6
         Change2 123
commit 7763c4ef9c01b7b7c5189d9b9fa2cedaeff62d68
         Change 123
commit 2a60e37761ed3de745e760d5a472fd593c4c9b26 (origin/release/Sprint1, release/Sprint1)

$ git checkout release/Sprint1
Switched to a new branch 'release/Sprint1'
Branch 'release/Sprint1' set up to track remote branch 'release/Sprint1' from 'origin'.

~/git/cherrypick_test (release/Sprint1)
$ git log
commit 2a60e37761ed3de745e760d5a472fd593c4c9b26 (HEAD -> release/Sprint1, origin/release/Sprint1)

~/git/cherrypick_test (release/Sprint1)
$ git cherry-pick 3e01cdf9d11043fd58e4684742a3f69ee350b037 62ab4c96a767113d22fb2f78d20b6d72587fff86
error: could not apply 3e01cdf9d... 
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

Я не понимаю, почему могут возникнуть конфликты, поскольку это просто добавление кода в один файл для демонстрации, но после открытия файла из SourceTree я вижу следующеев конфликте слияний:

<<<<<<< HEAD
=======
//adding change 123
//second change 123

//change 124

//change 125

>>>>>>> 3e01cdf9d... SG7-125 test cherry picking function

В этом примере я должен получить только 124 и 125, но оба 123 идут вместе с ними.

1 Ответ

0 голосов
/ 15 февраля 2019

Сделайте это

git checkout Release1
git cherry-pick C1 C3 C5 C2

, затем выполните простое слияние.

...