3

リモート reflog にあることがわかっているが、ローカル リポジトリにはない SHA へのリモート ブランチ ポインターをリセットする方法はありますか?

ローカル リポジトリでリセット (ソフト/ミックス/ハード) がどのように機能するかはよく知っていますが、ここでは役に立ちません。

これが私が修正しようとしている状況です。しばらくフェッチを行っていなかったので、リモート マスターはまだローカルにないマージで更新されていました。

私は失敗しgit push --force、リモートの機能ブランチのみを更新する意味を持ちましたが、引数を忘れて、機能ブランチとマスターをローカルに持っていたリビジョンに強制することになりました。

これは、マスターが最後にフェッチした後に発生したマージ コミットを欠落していたことを意味します。私たちは github を使用しているので、マスターが以前にいた SHA を知らせる電子メールがありました。また、URLにアクセスして、コミットがまだそこにあることを確認できました(ガベージコレクションはまだありません)。

失ったマージをやり直し、それを再度プッシュするだけで、それを「修正」することができました(別のコミッターと時間だったため、SHAを変更することになりました)。これは最適ではなく、マスターで複数のマージ コミットを見逃していた場合はさらに悪化する可能性があります。

私がやりreset --hardたかったことは、それが存在するはずだったSHAへのリモートマスターブランチだけでした。レポへのSSHアクセスなしでそれを行う方法はありますか?

これは github 上にあるため、レポに直接アクセスして、そこから ssh して直接リセットすることはできません。

4

3 に答える 3

4

GitHub に直接アクセスしたりリセットしたりすることはできないと思います。.
つまり、GitHub リポジトリのreflogを調べるためにGitHub サポートに連絡する必要はありません。
新しいブランチを作成するか、既存のブランチにリセットすることで、失われた SHA1 を可視化することができます。

実際、リポジトリの所有者は GitHub Event API にクエリを実行できます「 github はコミット ID を覚えていますか?
」を 参照してください。


OP Ted Naleidは、理由としてこのスレッド(およびこのスレッド)に言及して確認します。

これは仕様によるものです。
つまり、機密データを誤ってプッシュした場合、サーバー上の参照を巻き戻すことができます。
オブジェクトはまだサーバー上に存在しますが (ガベージ コレクションが行われるまで)、たまたま SHA1 を知っていたとしても、誰もあなたの秘密のものを取得することはできません。

Dan Moldingは、彼自身の回答のコメントで以下を確認します。

さらにテストを行ったところ、使用するプロトコルによってクローンの動作が異なることがわかりました。

  • SSH 経由 (およびおそらく git プロトコル経由) のクローン作成は、説明したとおりに動作します。つまり、到達不能なコミットはクローンに転送されません。
    これで、HTTPS でもテストしました (GitHub 自体を使用)。そして、それは見栄えがよくありません。クローンは到達不能オブジェクトを取得しません。

  • ただし、ローカルでクローンを作成すると、すべてのコミット (到達できないかどうかに関係なく) が転送されます。

(ただし、OPは、ローカルクローンを使用すると、デフォルトでディレクトリの下のファイル.git/objects/が可能な場合にスペースを節約するためにハードリンクされるためだけであることを明確にしています。
git clone --no-hardlinks file:///Users/yourUser/your/full/repo/path repo-clone-name到達不能なコミットを転送しません)

于 2012-07-16T06:46:22.783 に答える
3

試しましたgit push --force origin <sha>:masterか?これにより、オリジンのマスターが指定したSHAを指すように設定され、質問はありません。

于 2012-07-16T17:14:12.727 に答える
1

GitHub リポジトリを新しいローカル リポジトリに複製しようとしましたか? クローンには「失われた」オブジェクトが含まれている可能性があると思います。その後、新しく複製されたレポに「失われた」オブジェクトが作成されます。ローカルでリセットを行ってから、修正した参照を GitHub にプッシュして戻すことができます。

于 2012-07-16T12:16:15.287 に答える