7

GitHub リポジトリに問題があります。ワークフローについて説明します。

開発者は、メインライン ブランチから機能/バグ修正ブランチを作成します。彼らは変更をプルリクエストしてマージして戻します。メインラインブランチからリベースして、作業中にそこから最新の更新を取得する場合があります。リベースの後、機能ブランチに --force をプッシュします。

最近、2 つのプル リクエストが GitHub Web インターフェイスを使用して自動的にマージされました。その後、リクエストのマージから約 2 日後、これらのコミットの変更がコードに含まれていないことが判明しました。これらの変更が元に戻されたり、上書きされたりしたことを示す履歴はありません。マージ自体はコミット履歴に表示されず、個々のコミット自体も表示されません。しかし、プル リクエストは正常にマージされました。欠落しているコミットの 1 つが選択できなくなりました。試してみると、fatal - bad object メッセージが表示されます。

歴史の書き換えが行われたと思われます。どうすればこれを見つけ、どうすればこれを防ぐことができるでしょうか。ワークフローに根本的な問題はありますか?

4

1 に答える 1

3

あなたが直面している問題は、開発者がメイン ブランチからリベースし、ブランチを強制的にプッシュすることに関係しています。git rebase実際には、行ったすべての変更をコミット解除し、メイン ブランチをマージしてから、コミットを再適用します (あたかもパッチ ファイルであるかのように)。これにより、完全に新しいハッシュを持つ完全に新しい git コミットが作成されます。

つまり、古いコミットは失われ、新しい同一のコミットが作成されました。

そのため、公開されている作品をリベースすることは非常に推奨されません。これは、事実上歴史を変更しているためです。あなたの仕事から分岐した人々は、彼らの仕事がもはや利用できない変更に基づいている場合、非常に悪い日を過ごすでしょう.

編集: コミット自体は失われず、リポジトリにまだ存在します。ただし、手元のブランチでは使用できなくなりました

于 2013-12-23T15:40:26.480 に答える