0

私は、歴史的に多くのコミットが「バグ修正」、「今回は実際のバグ修正」、「最終的なバグ修正」、「最終的に修正」された github リポジトリで作業しています。

これらはマスターに直接コミットされました。どうすればそれらをつぶすことができますか?

1年前の彼の投稿から-基本的にこれは悪いように聞こえます.githubで複数のコミットを押しつぶしたい. この1年で何か変化はありましたか?

4

2 に答える 2

2

今日の答えは基本的に同じです。これらのコミットを破棄することは可能ですが、Git では共有履歴を書き換えることを強く避ける必要があります。

あなたと私がそれぞれ、GitHub にも存在するリポジトリのコピーを持っていると想像してください。

A---B---C

Bコミットとが実際には一緒にコミットされるべきであることに気付いたCので、ローカル コピーでこれらのコミットを押しつぶします。あなたは今持っています

A---D

whereはとDの組み合わせですが、GitHub と私はまだ持っていますBC

A---B---C

この時点で、ファイルの内容はどこでも同じですが、コミット ID は異なります。--forceGitHub のmasterブランチには、履歴に存在しなくなった 2 つのコミットが含まれているため、を使用せずに GitHub にプッシュすることはできません。

使用する場合--force、GitHub に変更を受け入れさせることができますが、現在、私のリポジトリには上流に存在しないコミット オブジェクトが含まれています。使用せずに GitHub にプッシュすることはできません--force(これにより変更が無効になります)、または変更を取り込むための比較的ファンキーなマージを実行せずに、おそらく私の作業をリベースするなどです。あなたがしたことを私に。

これは、より多くの開発者 (Linux カーネル リポジトリでこれを行うイメージ!) と、より多くの作業が同時に行われると、さらに厄介になります。

本当に、誘惑に駆られたときはいつでもgit push --force、座ってちょっと考えてみてください。あなたはおそらく、非常に正当な理由がある場合にのみ行うべきことを行っています。

私のお勧めは、あなたの歴史が少し乱雑であることを受け入れることですが、今後の改善に努めることです. これらのコミットは、GitHub にプッシュする (または他の開発者と共有する) 前に、ローカルでクリーンアップできます。機能ブランチで作業し、必要に応じて 、 などを使用cherry-pickrebaseてコミット履歴をクリーンアップしてからプッシュします。

于 2014-06-17T19:52:17.550 に答える