2011-07-30 6 views
4

私は次はgitの中で可能であるかどうかを知りたい:gitでトピックブランチをマージして、トピックブランチのコミット履歴をすべて削除しますか?

は、私は以下の歴史があるとします。

A---B---C---D---E master 
     \ 
      W---X---Y topic 

を、私は戻ってマスターにトピックブランチで行われたすべての変更をマージしたいです、コミット履歴は保持されません。つまり、代わりに:、Fは新しいコミットWで行われた変更に相当し、masterブランチにコミットされ

A---B---C---D---E---F master 

A---B---C---D---E---F master 
     \  /
      W---X---Y topic 

私は、次の歴史を持っていると思いますX,Yが一度に適用されます。

私はまた、完全なトピックブランチを維持できるようにしたいと思います:

A---B---C---D---E---F master 
     \   
      W---X---Y topic 

これは可能ですか?私はgit rebaseでいくつかのテストを行ってきましたが、これまでのところ、必要な方法で動作していません。

ありがとうございます。

答えて

7

それは悪いツェッペリンが提案するものよりも簡単でなければなりませんが、私はこれを試していない。しかし

$ git checkout master 
$ git merge --squash topic 
$ git commit *what has changed* 

、私はgit help merge権利を理解するとき、それはトリックを行う必要があります。

+0

ありがとう!これは私のためのトリックでした。悪いzeppelinとantlersoftのおかげです。 –

+0

今日私はこれを読んでいます:http://sandofsky.com/blog/git-workflow.html価値のある付随する読書かもしれません。 – Boldewyn

1

トピックブランチのコピーを作成し、トピックブランチのコミットを1つに縮小してマスターブランチ(git rebase -i E)に対話的にリベースし、最後に作成したトピックブランチのコピーを削除します。これらの後、あなたが望むものを得ることができなければなりません。

0

Gitは1がオンにコミットcherrypick、マスターに続いて(一つにコミットスカッシュ)

--interactive

をマスターをリベース(これは使い捨てである)オフトピック新しいブランチを作成します。捨て枝。

マスターに必要な履歴を正確に表示すると、トピックブランチは元の状態になります。

同じことを行う簡単な方法があるかもしれません...