GIT выбирает все мои коммиты, которые существуют в одной ветке, в другую ветку

У меня есть 2 ветки A и B. Ветвь B в какой-то момент была ответвлена ​​​​из ветки A, и несколько пользователей фиксируют обе ветки. Я хочу выбрать все мои коммиты (которых еще нет в ветке A) из ветки B в ветку A без необходимости вручную искать каждую из них. Это как-то возможно?

Спасибо


person user3414980    schedule 20.07.2018    source источник
comment
Похоже на то, что потенциально можно сделать с помощью интерактивной перебазировки?   -  person OliverRadini    schedule 20.07.2018
comment
Если вам нужны все коммиты, вам лучше объединить B с A. Или я что-то упустил?   -  person Matt    schedule 20.07.2018
comment
Мне нужны только коммиты, совершенные мной, а не другими пользователями. И я не могу объединить или перебазировать эти ветки, так как я не их владелец.   -  person user3414980    schedule 20.07.2018
comment
Хорошо, тогда можно выполнить интерактивную перебазировку, как предложил Оливер. Во-первых, у ветки нет владельца, а во-вторых, пока вы не отправите свою локальную ветку в удаленное репо, это не повлияет ни на кого другого. Просто сделайте git rebase -i A и держите коммиты подальше от вас (удалите или прокомментируйте другие строки). Затем вы можете объединить B в A. Не нажимая B   -  person Matt    schedule 20.07.2018


Ответы (2)


Более простым способом было бы использовать rebase --onto:

git rebase --onto target-branch [LAST_COMMON_COMMIT_BEFORE_BRANCH] branch-to-move

если ваше репо выглядит так:

a - B - c - d - e -> master
      \      \
       \      f - g -> some-feature
        \
         h - i - j -> branch-to-move

команда

git rebase --onto some-feature B branch-to-move

приведет к

a - B - c - d - e -> master
             \
              f - g -> some-feature
                   \
                    h' - i' - j' -> branch-to-move
person Timothy Truckle    schedule 20.07.2018

Разобрался и сделал этот скрипт PowerShell:

$Source = Read-Host -Prompt 'Enter Source branch: '
$Target = Read-Host -Prompt 'Enter Target branch: '
cd C:\project
git log $Source --not $Target --cherry [email protected] --author-date-order --reverse | 
Select-String -Pattern "commit" |
ForEach-Object { git cherry-pick -x $_.ToString().split("+")[-1].Trim(' ') }
person user3414980    schedule 20.07.2018