git rebase Master Develop
Эта команда применяется A
, B
, C
и D
к S
. Поскольку изменения A
и B
уже включены в S
, они пропускаются. Только C
и D
будут применены повторно. История Develop
будет:
I--S--C'--D' :Develop
И история Master
неизменна:
I--S :Master
Вы можете столкнуться с конфликтами во время перебазирования. Если что-то происходит,
- запустить
git status
, чтобы найти конфликтующие файлы;
- редактировать файлы, пока они не будут иметь нужного содержимого;
- пробег
git add <files>
;
- пробег
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 . Это просто грубая симуляция. Некоторые коммиты могут быть пропущены как коммит-коммиты и коммиты, чьи изменения были предварительно включены другими коммитами.