2016-03-15 2 views
1

У меня есть две независимые ветви в моем хранилище Git:стежком две независимые истории ветви вместе

A---B---C branch "old" 
X---Y---Z branch "master" 

Я хочу, чтобы создать следующую историю:

A---B---C---X---Y---Z 

Я попытался это с помощью следующей команды перебазирования (текущая ветвь "мастер"):

git rebase --strategy=recursive --strategy-option=theirs old master 

Это терпит неудачу с:

First, rewinding head to replay your work on top of it... 
fatal: Could not parse object 'fb56e6e20ea4a605503732df1f5a0a407808dffa^' 

fb56e6 является первым фиксатором «старой ветви».

В качестве альтернативы я использовал команду вишневого подборщика (текущая ветвь «мастер»):

git rev-list --reverse old | git cherry-pick --stdin --keep-redundant-commits -X theirs 

Это прекрасно работает, но все совершает получить новый «коммиттер». Есть ли способ сказать, что вишневый выбор не должен устанавливать коммиттера? Если нет, есть ли способ добиться того, что я хочу с помощью переустановки?

+0

Что вы подразумеваете под "независимыми"? Встречаются ли они где-нибудь в истории? – choroba

+0

Нет, они не встречаются (я думаю, что проблема в том, что git rebase натыкается) –

+0

Возможно [git-reparent] (https://github.com/MarkLodato/git-reparent)? – larsks

ответ

1

я решил его с помощью git filter-branch:

FIX_COMMITTER=' 
    if test "$GIT_AUTHOR_NAME" != "$GIT_COMMITTER_EMAIL"; then 
     GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL" 
     GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME" 
     export GIT_COMMITTER_EMAIL 
     export GIT_COMMITTER_NAME 
    fi 
' 
git filter-branch -f --env-filter "$FIX_COMMITTER" -- master 

Источник идеи: https://gist.github.com/maciej/5875814

0

Мне нравится ваш подход к вишневому подбору. Просто запустите стандартные команды «set my author info», прежде чем делать вишневый подбор в соответствии с данными «commiter», которые вы хотите сохранить.

git config --global user.name "John Doe" 
git config --global user.email [email protected] 

А затем задайте автору информацию себе, когда закончите.