2017-10-01 6 views
0

svnリポジトリをgitに変換したいと思います。今私は、変換された枝の上にいくつかのクリーンアップを行うにはしたいと思います:マージコミットを置き換えるためのスタートポイントの更新方法

A1-A2-A3--A6-A7-----A11-A12-An 
    \  \   /
    `------B1-B2---B25´ 

B1は、マージされ、より良い方法は、A7から開始し、マージを削除するかもしれない分岐BにA7への変更A3をインポートするためにコミットB1をコミットします。

A1--A6-A7-A8-A9----A12-An 
     \  /
      `B2--B25´ 

私はブランチBをAにリベースしようとしましたが、結果はすでに同じです。上流のmissundertsandingとして

更新 A.には追跡リモートブランチが(SVNのブランチとタグが削除されていない)されています。

私は私はあなたが正しい道の上にいると思う

答えて

0

もタイトルを更新しました。

git checkout A 
git pull 
git checkout B 
git pull 
git rebase A 
<fix conflicts> 
git push -f 
+0

あなたのANSERをありがとう。私は「上流」の邪悪を忘れてしまったようだ。私の最初の理解では、親の地方支部の別の言葉かもしれません。私は質問の部分でこれを明らかにするでしょう。 – MarS

0

tecnicalポイント:枝の先端にBブランチからの変更内容をリベースして次のことを試してみてください、あなたが歴史を墨消した場合、新しいコミットは作成されます(彼らは新しいハッシュを持っており、もしますあなたの歴史はすでに他の開発者と共有されているので、強制的にリポジトリを更新するように指示する必要があります)。

私は、変換する方法を説明します:B枝に

# this : 
A1-A2-A3--A6-A7-----A11-A12-An 
    \  \   /
    `------B1-B2---B25´ 

# into this : 
A1--A6-A7-A8-A9---A11-A'12-A'n 
     \   /
      `B'2--B'25´ 

コミットは新しいコミットすることだけでなく、merge in Bコミットから始めて、Aブランチにコミットします。手始めに


、私は一時的な枝の上に作業することをお勧め:

# create branch 'wipB' on commit B25 and switch to this new branch : 
git checkout -b wipB B25 
  1. あなたがA7の上にB2, ..., B25を再生したい場合は、
    git rebase --onto <new_base> <upstream> <branch>
    バリアントを使用することができますgit rebasedoc here):

    # note the `B1` : the commit mentionned as <upstream> is ommitted 
    git rebase --onto A7 B1 wipB 
    
  2. A12をコミットマージを再作成します

    # start a new "A" branch from A11 : 
    git checkout -b wipA A11 
    
    # merge the new "B" branch : 
    git merge wipB 
    
    # once merge is resolved, you can compare with the original A12 to see 
    # if this new merge commit has all the content you expect : 
    git difftool -d wipA A12 
    
  3. A'12の上にA13, .., Anを再生する:

    git rebase --onto wipA A12 An 
    
関連する問題