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

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

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

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

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

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

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

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

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 人以上いる� �合は避けるべきです。 If someone force pushes to a repository, the force push may overwrite commits that other people based their work on. Force pushing changes the repository history and can corrupt pull requests.

参考リンク