1

git を使用してプロジェクトに取り組んでいます。私は 2 つのフィーチャー ブランチを持っていdev-aます。dev-bdevelopmaster

私は少し作業し、dev-aそれを完成させ、それを にマージし直しdevelop、 で少し作業を行いdevelop、 で開始し、少し作業したdev-b後、 で行うべきことを見つけたdev-aので、 をチェックアウトdev-aして修正します。私の DAG は次のようになります。

コミット ハッシュは明らかに作り出されたものであり、実際のハッシュではありません。それらは参照用です

*   008 - (dev-a) Fix problem on dev-a
|
| * 007 - (dev-b) Work on dev-b
| * 006 - Work on dev-b
| |
| * 005 - (develop) Work on develop
| * 004 - Work on develop
| * 003 - Merged dev-a
|/|
* | 002 - Work on dev-a
* | 001 - Work on dev-a
 \|
  * 000 - Work on develop
  |

ただし、私がやりたいのは、そのコミットをマージの「前」に発生させて、リベースdevelopしてそのdev-b上に置き、すべてをきちんと整理できるようにすることです。

  * 007 - (dev-b) Work on dev-b
  * 006 - Work on dev-b
  |
  * 005 - (develop) Work on develop
  * 004 - Work on develop
  * 003 - Merged dev-a
 /|
* | 008 - (dev-a) Fix problem on dev-a
* | 002 - Work on dev-a
* | 001 - Work on dev-a
 \|
  * 000 - Work on develop
  |

dev-aの修正は後のコミットと競合しないことに注意することも重要です。これは、単一のファイルに対するかなり小さな変更です。関連するすべてのコミットはローカルであり、共有されていません。

git はかなり柔軟なので、これができると確信していますが、それが可能かどうか、どのように行うか、またはそれが良いアイデアかどうかはわかりません。

4

1 に答える 1

2

これはすべて非常に簡単です。マージを再度実行し、それに対してすべてをリベースするだけです。

# make a branch of the 'develop' right before the merge
git checkout -b new-base 000 
# merge again
git merge dev-a

git checkout develop
# it moves all 'develop' commits made after the merge onto the new base.
git rebase new-base

git checkout dev-b
# moves all 'dev-b' commits onto the rebased 'develop'.
git rebase develop

# drop it, I don't think it has any value now.
git branch -d new-base
于 2012-07-26T15:17:56.800 に答える