はい、リンクしたドキュメントで説明しているように、元の分岐元のコミットにブランチをリベースできます。これにより履歴が書き換えられ、ブランチを再作成することができます。 をgit rebase
に渡す必要があります。それ以外の場合は、早送りして何も変更しません。
だから、ブランチの機能を使っているとしましょう。feature1
$ git show --oneline
c7058f7 Initial commit
$ git checkout -b feature1
$ echo "feature" > feature1
$ git add feature1
$ git commit -m "feature1"
$ git checkout master
$ git merge feature1
$ git revert -m 1 HEAD
$ git checkout feature1
$ git rebase --no-ff c7058f7
$ git checkout master
$ git merge feature1
$ git log
commit 9bc0016d5c412ed7b9401bf0fd8fe5519a235a9f
Merge: fa2b2cb 48e007b
Merge branch 'feature1'
commit 48e007bcef4675981076d84d245a2a489340a509
feature1
1 file changed, 1 insertion(+)
commit fa2b2cbe4192a80d3c660f84f9d5f4ba4a7f7ba7
Revert "Merge branch 'feature1'"
This reverts commit 578502c12340f5ba7df47976d9e22245b5e9d8f8, reversing
changes made to c7058f7f1dbf6409bfbc44a61eda1adf1155a981.
1 file changed, 1 deletion(-)
commit 578502c12340f5ba7df47976d9e22245b5e9d8f8
Merge: c7058f7 7b4690e
Merge branch 'feature1'
commit 7b4690e19b45a089bc0db44cf66ebfa3495e48f9
feature1
1 file changed, 1 insertion(+)
commit c7058f7f1dbf6409bfbc44a61eda1adf1155a981
Initial commit
これはHow to revert a faulty mergeに要約されている: 次のワークフローを示し
をしかし、あなたがしなければ、実際に、あなたのようにそれを再作成するためにいくつかの 方法を必要とする、Aをコミット変更する必要はありません同じ変更を加えた新しいコミット。
$ git rebase [-i] --no-ff P
--no-ffのオプションはすべて、新しいコミット を持つ新しいブランチA'-B'-C」を作成します(: リベースコマンドの--no-ffのオプションは、これを行う方法を提供しますすべてのSHA IDが異なる場合) 実際にはコミットBを変更するだけです。この新しいブランチ をメインラインブランチに直接マージして、 ブランチの変更をすべて取得するようにしてください。
に余分なコミットを追加するだけで--no-ffを使用することもできます。のは、このHOWTOの 開始時に議論の状況を再検討してみましょう:
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E <-- fixed-up topic branch
この時点で、あなたはトピックブランチを再作成する--no-FFを使用することができます。
A'---B'---C'------------D'---E' <-- recreated topic branch
/
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E
を得
$ git checkout E
$ git rebase --no-ff P
コミットWを元に戻すことなく、再作成されたブランチをメインラインにマージすると、メインラインの履歴は次のようになります。
A'---B'---C'------------D'---E'
/ \
P---o---o---M---x---x---W---x---M2
\ /
A---B---C