ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2021-03-02. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

コミットが GitHub にはありますが、ローカルにはありません

特定のコミットが、GitHub Enterprise Server上では見えるにもかかわらず、リポジトリのローカルクローンの中には存在しない、という場合があります。

ここには以下の内容があります:

特定のコミットを表示するため、コマンドラインで git show を使うと、致命的エラーが発生することがあります。

たとえば、以下のコマンドを入力して、ローカルで bad object のエラーが発生したとします。

$ git show 1095ff3d0153115e75b7bca2c09e5136845b5592
> fatal: bad object 1095ff3d0153115e75b7bca2c09e5136845b5592

しかし、以下のように your GitHub Enterprise Server instanceでコミットを表示すると、問題が発生しません。

github.com/$account/$repository/commit/1095ff3d0153115e75b7bca2c09e5136845b5592

この場合、以下の原因が考えられます:

  • ローカルのリポジトリが古い。
  • そのコミットが属するブランチが削除されたため、コミットが参照できなくなっている。
  • 誰かがコミットをフォースプッシュで上書きした。

ローカルのリポジトリが古い

ローカルのリポジトリがまだコミットを取得していないことも考えられます。 リモートリポジトリからローカルクローンに情報を取得するには、以下のように git fetch を使用します:

$ git fetch remote

これにより、チェックアウトしたファイルに変更が加えられることなく、リモートリポジトリからローカルクローンに、情報が安全にコピーされます。 フォーク元のリポジトリから情報を取得するには、git fetch upstream を使用します。また、クローンのみを行ったリポジトリから情報を取得するには、git fetch origin を使用します。

参考: 詳しい情報については、Pro Git ブックのリモートの管理とデータのフェッチをお読みください。

コミットのあるブランチが削除された

リポジトリのコラボレーターが、そのコミットを持つブランチを削除した、あるいはブランチにフォースプッシュした場合、見つからないコミットは孤立している (つまり、どの参照からもたどり着けなくなっている) ため、ローカルクローンにフェッチできません。

幸いコラボレーターの誰かが、見つからなくなったコミットを持つリポジトリのローカルクローンを持っている場合は、それを GitHub Enterprise Serverにプッシュして戻してもらうことができます。 コミットがローカルブランチに参照されていることを必ず確認してから GitHub Enterprise Serverに新しいブランチとしてプッシュするよう依頼してください。

たとえば、コラボレータの一人が、コミットを含むローカルブランチ (B とします) をまだ持っていたとします。 このローカルブランチは、フォースプッシュまたは削除されたブランチをトラッキングしていると考えられます。そして、まだ更新されていません。 コミットが失われないうちに、そのローカルブランチを GitHub Enterprise Server の新しいブランチ (recover-B とします) にプッシュしてもらいましょう。 ここでは仮に、upstream という名前のリモートがあり、これを通して github.com/$account/$repository にプッシュアクセスがあるとします。

コミットを持つローカルブランチを持っている人が、以下のコマンドを実行します:

$ git branch recover-B B
# コミットを参照する新しいローカルブランチを作成
$ git push upstream B:recover-B
# ローカル B を新しい上流ブランチにプッシュし、コミットへの新しい参照を作成

次に、あなたが以下のコマンドを実行します:

$ git fetch upstream recover-B
# ローカルリポジトリへコミットをフェッチ。

フォースプッシュは避けましょう

絶対に必要でない限り、フォースプッシュは避けましょう。 特に、リポジトリにプッシュできる人が 2 人以上いる場合は避けるべきです。

参考リンク