2012-11-17 8 views
6

GitHubリポジトリに問題があります。私はワークフローについて説明します:マージ後のコードが見つからない

開発者は、メインラインブランチからフィーチャー/バグ修正ブランチを作成します。彼らは、変更を要求して元に戻すことができます。彼らは、mainlineブランチからリベースして、動作しているときに最新のアップデートを取得します。リベースした後、彼らは機能ブランチを押します。

2つのプルリクエストは、最近GitHubウェブインターフェースを使用して自動的にマージされました。その後、リクエストのマージの約2日後に、これらのコミットの変更がコード内にないことが発見されました。歴史のなかには、これらの変更が元に戻ったり上書きされたことはありません。マージ自体はコミット履歴には現れず、個々のコミット自体も現れません。しかし、プル要求は正常にマージされました。欠落しているコミットの1つは、チェリーピックで利用できなくなりました。試してみると、致命的なオブジェクトメッセージが表示されます。

歴史の書き換えが起こったと思われます。どのようにしてこれを見つけ出すことができますか?ワークフローに根本的な問題がありますか?

+4

この問題が発生した時点で、reflogを検査しましたか?何が起こっているかについて、そこにいくつかの手がかりがあるかもしれません。一般的には、強制押しは悪い考えです。マージ後にそれらが機能ブランチに強制的にプッシュされた場合、私はマスターブランチ上のコミットを失ってはいけないとは思うが、何が起こるかわからない。誰かが間違ってメインラインに押し込まれてしまった - 何か他の明白な方法が起こることはありません。 – MattJenko

+0

最近Githubにメールを送ったのは、Githubのリポジトリで強制的にプッシュを禁止することができるかどうかを尋ねるために、いくつかのコミット、我々はそれらを回復するために援助を求めるためにGHに連絡することができます。通常、全ての孤立したコミットはGHのreflogとプルリクエストを受けた開発者のローカルリポジトリになければなりません。ガベージコレクションは自動または手動で収集されます。 –

+0

類似のものについてはこちらを参照してください:http://stackoverflow.com/questions/5094524/github-prevent-colaborator-from-push-f GitHubはあまりそれを実装していないようです。将来的には、1)仲介レポを受け取り、物事を受け取り、様々なフックが設定され、Githubにすべて罰金が科せられます。2)中央レポにプッシュできる人数を制限します。週など)。私はこの答えが満足いくものではないかもしれないと知っています。 –

答えて

0

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

要するに、古いコミットが失われ、新しい同一のコミットが作成されました。

これは、という非常にの場合、あなたが効果的に履歴を変更しているため、公開されているすべての作業をリベースすることをお勧めしません。彼らの仕事がもはや利用できない変更に基づいている場合、あなたの仕事から分岐した人は非常に悪い一日になります。

編集:コミット自体は失われず、依然としてあなたのレポに存在します。しかし、手元の支店ではもう使用できません。

+0

まあ、いいえ。それは「コミットしていません」というわけではありません。なぜなら、リベースされたブランチをプッシュすることはお勧めできません。 – jthill

+0

@jthill:詳しく教えてもらえますか?あなたは私が言ったことを否定し、なぜ私が言ったことが間違っているのかを説明しなかった。また、http://git-scm.com/book/ch3-6.htmlでも、私がやったのと同じ方法でリベースパートの危険性が説明されています。多分私は何かを忘れた? – Faisal

+0

彼らの説明はあなたと同じではありません。あなたが使用している「コミットしていない」という言葉は決してそこには現れません。あなたの答えはそこでのやや誇張された記述よりも強い意味合いを持っています。すべての古いコミットは、リベース後も依然としてあなたのレポにあります。 – jthill