Как распространять сдавленный коммит от мастера для разработки и добавления веток - PullRequest
0 голосов
/ 11 марта 2019

Я сдавил начальные коммиты в мастере на один коммит, используя git rebase , сгенерировав новый сдавленный коммит, но на ветви ветвления коммиты остаются такими, как есть.Как заменить старые коммиты новым сдавленным коммитом в мастере для разработки и других ветвей функций?

Текущее состояние

I--A--B                     :Master
       \ C--D               :Develop

После Сквошинга

I--S                        :Master
 \ A--B--C--D               :Develop

Что яхочу

I--S                        :Master
   \ C--D                   :Develop

1 Ответ

0 голосов
/ 11 марта 2019
git rebase Master Develop

Эта команда применяется A, B, C и D к S. Поскольку изменения A и B уже включены в S, они пропускаются. Только C и D будут применены повторно. История Develop будет:

I--S--C'--D'      :Develop

И история Master неизменна:

I--S              :Master

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

  1. запустить git status, чтобы найти конфликтующие файлы;
  2. редактировать файлы, пока они не будут иметь нужного содержимого;
  3. пробег git add <files>;
  4. пробег git rebase --continue.

Мое понимание на git rebase --onto A B C, в bash:

commits=$(git rev-list --reverse B..C)
# if C is not a branch name, it leads to detached HEAD state.
git checkout C
git reset A --hard
for c in $commits;do
    git cherry-pick $c
done

A, B, C являются commit-ish . Это просто грубая симуляция. Некоторые коммиты могут быть пропущены как коммит-коммиты и коммиты, чьи изменения были предварительно включены другими коммитами.

...