2016-03-15 63 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 

這工作得很好,但所有承諾得到一個新的「提交者」。有沒有辦法告訴櫻桃挑選它不應該設置提交者?如果沒有,是否有辦法通過rebase實現我想要的?

+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

我喜歡你的櫻桃挑選方法。在進行櫻桃挑選之前,只需運行標準的「設置我的作者信息」命令以匹配要保留的「提交者」數據。

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

然後在完成後將作者信息設置回給自己。