Если вы хотите проверить что-то, просто клонируйте свой репозиторий и играйте в клон.
$ git clone your_repo test_repo
$ cd test_repo
В вашем случае D
должен быть просто коммитом слияния, который не содержит многоесли B
и C
не конфликтуют.Таким образом, простой ребаз будет работать
$ git rebase branch_of_B branch_of_C
Попробуйте это в пустом хранилище:
echo A > file1
git add file1
git commit -m A
git checkout -b B
echo B > file2
git add file2
git commit -m B
git checkout master
git checkout -b C
echo C > file3
git add file3
git commit -m C
git checkout -b merge_branch
git merge B
echo D > file4
git add file4
git commit -m D
Теперь у вас есть это (запустить gitk --all
):
B
/ \
A M - D
\ /
C
и вы на D
.Вы можете выдать
$ git rebase B
First, rewinding head to replay your work on top of it...
Applying: C
Applying: D
И у вас останется:
A - B - C' - D'
\
C
с C'
и D'
, идентичным C
и D
с точки зрения "содержимого"».Если вы хотите очистить, вы можете удалить ветку C
в этом примере, но вам придется ее принудительно использовать, так как это приведет к исходной фиксации C
.
$ git branch -D C