0

残りのファイルを別のリポジトリに移動する準備として、一連のファイルを削除するためにgit filter-branch --index-filter 'git rm --cached --ignore-unmatched badfiles/ badfiles2/' --prune-empty(ここで) を実行しました。--prune-empty結果の空のコミットを取り除きますが、マージには作用しません。これは理にかなっています。

現在、この特定のレポの履歴は、実際には何も追加していない一連のマージと、実際には変更を追加していない他のマージのマージであるいくつかのマージでかなり見苦しく見えます (書き換えられた履歴では、それらは変更された可能性があります)。 filter-branch の前に「有用」)。

この注釈付きスニペット ( で生成git log --graph --oneline --shortstat)を検討してください。

*   575e3b5 Merge pull request #68 from chris/feature # KEEP THIS MERGE!
|\  
| * 5dbc3f1 Actual feature changes
| |  2 files changed, 2 insertions(+), 2 deletions(-)
| * 35abc98 Cleanup/prep
|/  
|    2 files changed, 22 insertions(+), 16 deletions(-)
*   c3b3d86 Merge pull request #46 from org/topic_branch-mods # USELESS-C
|\  
* \   892de05 Merge pull request #47 from org/topic_branch # USELESS-B
|\ \  
| |/  
|/|   
| *   e738d4b Merge branch 'master' into topic_branch # USELESS-A
| |\  
| |/  
|/|   
* | 4182dac CommitMsg #40 #SQUASHED-PR
| |  2 files changed, 15 insertions(+), 6 deletions(-)
* | 3b42762 CommitMsg
|/  
|    2 files changed, 29 insertions(+), 14 deletions(-)
* c4e62ba CommitMsg
|  2 files changed, 39 insertions(+), 16 deletions(-)
* c2bb13f CommitMsg
   4 files changed, 241 insertions(+)

これを次のように短縮したいと思います (明らかに、必要に応じて異なる ID を使用します)。

*   575e3b5 Merge pull request #68 from chris/feature # KEEP THIS MERGE!
|\  
| * 5dbc3f1 Actual feature changes
| |  2 files changed, 2 insertions(+), 2 deletions(-)
| * 35abc98 Cleanup/prep
|/  
|    2 files changed, 22 insertions(+), 16 deletions(-) 
* 4182dac CommitMsg #40 #SQUASHED-PR
|  2 files changed, 15 insertions(+), 6 deletions(-)
* 3b42762 CommitMsg
|  2 files changed, 29 insertions(+), 14 deletions(-)
* c4e62ba CommitMsg
|  2 files changed, 39 insertions(+), 16 deletions(-)
* c2bb13f CommitMsg
   4 files changed, 241 insertions(+)

したがって、すべて「空」のマージ (マージの変更なし)である「USELESS」マージを取り除きたいのですが、「空の KEEP マージに関連付けられている履歴/グループ化を保持したいと思います。これらのコミットを 1 つの「変更セット」にグループ化します。

または、従来の簡略化された横向きの歴史の別の例を見てください。

A -- B -- C -- D   ==>  A -- B --- D'
 \----\--/   /                \-E-/
       \----E 

「空の」マージを削除する解決策を試しました (このように) が、それらはすべての空のマージを削除し、例に表示されているように「有用な」空のマージを保持したい...

私が知る限り、「役に立たない」空のマージには、履歴の左/上にあるコミットは含まれていません。それらをきれいに除外する方法はありますか?私はそれらを説明/定義する方法さえ本当に知らないと思います...

与えられた例は意図的に単純化されていることに注意してください。価値があるのは、歴史の後半で、このレポは次のようになります。

*   3d37e42 Merge pull request #239 from jim/topic-dev
|\  
| *   05eaf9e Merge pull request #7 from org/master
| |\  
| |/  
|/|  
* |   1576482 Merge pull request #193 from john/master
|\ \  
| * \   187100e Merge branch 'master' of github.com:org/repo into master
| |\ \  
| * \ \   067cc55 Merge branch 'master' of github.com:org/repo into master
| |\ \ \  
| * \ \ \   a69e3d2 Merge branch 'master' of github.com:org/repo into master
| |\ \ \ \  
| | |/ / /  
* | | | |   0ce6813 Merge pull request #212 from jim/feature
|\ \ \ \ \  
| | |_|_|/  
| |/| | |   
| * | | |   0f5352e Merge pull request #5 from org/master
| |\ \ \ \  
| |/ / / /  
4

2 に答える 2