1

リベースの使い方はよくわかりませんが、リベースは開始点をより最近のコミットに変更するだけのようです

私の場合、プッシュされたブランチテストで何かを行い、別の人が変更をBからEにプルしました。その間に、コミットを少し変更し、リモートブランチを削除して(悪い考え)、同じコミットで再作成しました。

このため、マージの後で処理されます。

A---B---C---D---E--F--G--H  master
 \--B'--C'--D'--E'/    test

BとB'は同じであると同時に、同じコミットメッセージ...、C、C'も、..DとD'、EとE'

git rebase -i以外の解決策はありますか?試してみましたが、他のブランチのマージ履歴が失われます

実際にB、C、D、Eを削除したいのですが、ブランチがすでにマージされている場合は可能ですか?

私にはリモートマスターを押す権利がなく、引っ張るだけです

プルーニングを試しましたが、他のコミットを指しているため、これらの不要なコミットは削除されません。可能であれば、マスターAをマスターE'にリベースしたいと思います。

ヒントのthx

編集:そうでなければ、プッシュ権を持つ人はどのようにしてその状況を恒久的に修正することができますか?

私はこれを修正することができます

git reset --hard A
git pull repo1 test (where test still is at E')
git rebase --onto F A master

しかし、管理者がそれを引っ張った場合、それは効果がないと思いますか?、他のユーザーがこの混乱から引っ張る直前に、彼は自分でこの操作を行う必要がありますか?

4

1 に答える 1

3

Fでの不要なマージを取り除く最も簡単な方法は、移植ファイルを作成してそこに行を配置する<hash of F> <hash of E'>ことです。次に、履歴が希望どおりに見えることをgitkで確認します。すべてがファイルに見える場合、次のステップは、最近のコミットを書き換えることによって、そのグラフトを永続的にすることです。git filter-branch --tag-name-filter cat -- <hash of A>..master最後に、書き換えられたコミットをリポジトリに強制的にプッシュします。git push -f

于 2012-07-30T20:38:57.243 に答える