Как отменить несколько изменений в ветви до заголовка, но все из одной дочерней ветви? - PullRequest
1 голос
/ 11 марта 2019

У меня есть ветвь Sprint (Sprint1), состоящая из нескольких ветвей функций (перечисленных от самых новых до самых старых):

  • Feature4, Commit # 1
  • Feature3, Commit # 2
  • Feature3, Фиксация # 1
  • Feature2, Фиксация # 3
  • Feature2, Фиксация # 2
  • Feature2, Фиксация # 1
  • Feature1, Commit # 1

Я хочу удалить все из ветки Sprint из ветки Feature # 2 за одну операцию.Есть ли способ, которым я могу сделать это?

На самом деле у меня есть более 3 коммитов для функции # 2, и я не хочу возвращать их один за другим в случае, если я пропущу коммит,Я собираюсь разрешить множество конфликтов слияния, так как функции № 3 и № 4 были построены на функции № 2 и теперь должны быть независимыми.Я просто хочу вытащить функцию # 2 и разрешить все конфликты слияния за один раз.

В соответствии с запросом RomainValeri, следующее является результатом запуска git log --oneline --decorate --simplify-by-decoration --all из моей ветви Sprint1:

f12b0af (HEAD -> Sprint1) Merge of Feature #3 and Feature #4.
70c028b (Feature3) Feature #3, Commit #2
216764a (Feature4) Feature #4, Commit #1
060d98e (Feature2) Feature #2, Commit #3
2069da0 (Feature1) Feature#1 Commit #1
1d05fc0 (master) First Commit

1 Ответ

0 голосов
/ 12 марта 2019

Давайте предположим имена здесь: sprint для ветви спринта, и вы попытаетесь отменить все из feature2 ветви.

# next line was my first idea but probably no good
git rev-list $(git merge-base sprint feature2)..feature2

# since we have master as a ref for the merge-base, let's go simpler
git rev-list master..feature2

# or, if feature2 is branched of feature1 :
git rev-list feature1..feature2

выдаст вам список коммитов для возврата.

(Если вы уже удалили feature2, просто заново создайте его при коммите непосредственно перед слиянием в sprint, или получите его из reflog)

Затем вы можете связать возвраты без коммитов и просто коммититьоднажды в конце:

git revert -n <commit1>
git revert -n <commit2>
...
git commit -m "Revert of commits 1, 2, 3, ..."

Но я бы не стал автоматизировать процесс дальше, так как вам, вероятно, придется решать конфликты на этом пути.

...