1

今日、上流のブランチからプルしてリベースした後、上流のブランチへの最近のコミットが有効になっていないように振る舞う状況に遭遇しました。

私が覚えている最も良い順序での症状:

  1. ローカル ブランチでコーディングしている間、Visual Studio ソリューション ファイルは私の介入なしに変更されたように見え続けました。その新しいコンテンツは、最新のコミットで 1 つのファイルだけを元に戻しました (ただし、他の 3 つの .cs ファイルと .prj ファイルは元に戻していません)。Visual Studio がそれを行っているように見えましたが、確かなことはわかりません。(つまりgit status、新しく変更された .sln ファイルが表示されましたが、私の変更はプロジェクトに影響を与えるべきではありませんでした)。

  2. このファイルが変更されており、ソリューションが重要な新しい依存関係 (2 つのプロジェクトに追加された参照) を認識していないため、ソリューションをビルドできませんでした。変更されたファイルを破棄しても (アップストリームからの最新のコミットで変更を追加したかったという理論に基づいて) 役に立ちませんでした。

  3. 私はローカル開発ブランチで変更を行ってきましたが、単一のローカル コミットがどのように奇妙なことを引き起こしているのかわかりませんでした。そのような変更を行っていなかっただけです。

  4. VS を閉じて再度開き、ソリューションを複数回クリーニングして再構築しました。

  5. SmartGit ログには、私がローカル ブランチに対して行った、予期していたもの以外に、追加のコミットや変更は表示されませんでした。

  6. 交絡要因を取り除こうとして、ローカルの開発ブランチからローカルのマスター ブランチ (通常、新しいコミットを行わずに変更しないままにしておく) に切り替え、プロジェクトを再ビルドしましたが、結果はすべて同じでした。

  7. SmartGit ログが、マスターが実際にはマスターではないという視覚的な証拠を提供していることにようやく気付きました。SmartGit/Hg 5.0.3 (ビルド #2073) のこのスクリーン ショットを見てください。

    SmartGit ログのスクリーンショット

    これは git console で発行した後の結果git checkout masterです。しかし、コミット ノードを結ぶ青い線を見てください。これは、履歴をさかのぼって 11 番目のコミットを実際にチェックアウトしたことを示しています。

    私が発行git checkout master^すると、2番目のコミットが適切にチェックアウトされ、それに応じて青い線が調整されます。

    SHA による最新のコミットをチェックアウトするとgit checkout a07df46、青い線が一番上のコミットまで伸びます。

  8. 私が行うと、それがアップストリームからの最新のコミットの SHA を指してgit show-refいることを示しています- 期待どおりです。refs/heads/master

  9. 次の一連のコマンドを試しましたが、状況はまったく改善されませんでした (SHA はアップストリームからの最新のコミットのものです)。

    git checkout HEAD^
    git branch -f master master^
    git branch -f master a07df46
    git checkout master
    

私がやりたいことは、開発を続けられるようにリポジトリを同期することだけです!

すぐに解決できない場合は、すべてのローカル ブランチを個人用のリモート フォーク (アップストリームのメイン プロジェクトとは異なる) にプッシュし、ローカル リポジトリを削除し、アップストリーム リポジトリをローカルで再クローンしてからプルします。フォークから戻ってきた気になるブランチ。しかし、どのようにして git がこの奇妙なマスターだがマスターではない状態になったのか知りたいです。

リポジトリ全体を再クローンせずに、この奇妙な状態から回復するにはどうすればよいですか?

4

0 に答える 0