2012-04-10 9 views
1

GitHubのリポジトリにhereがあります。私は誰かのために働いているブランチを作って、彼らはレポをフォークし、働いている支店にいくつかの変更を加え、プルリクエストを提出しました。GitHub自動マージ後の致命的なエラー

GitHubが自動的にプルリクエストをマージすることを提案して以来、私は変更を試みました。私は先に進み、大きな緑の "Merge Pull Request"ボタンをクリックしました。作業ブランチへの変更が、私が暮らすことができるマスターブランチに適用されたことを除いて、すべてがうまくいっていました。

問題は、リポジトリが私または他の誰によってもフェッチできないことです。

[email protected]:/tmp/gh$ git clone git://github.com/dapphp/securimage.git 
Initialized empty Git repository in /tmp/gh/securimage/.git/ 
remote: Counting objects: 333, done. 
remote: Compressing objects: 100% (269/269), done. 
remote: Total 333 (delta 91), reused 297 (delta 55) 
Receiving objects: 100% (333/333), 3.91 MiB | 2.78 MiB/s, done. 
Resolving deltas: 100% (91/91), done. 
error: refs/remotes/origin/master does not point to a valid object! 
error: Trying to write ref refs/heads/master with nonexistant object 31d684d383913c4cf1a0d5ff0691c2c163284a35 
fatal: Cannot update the ref 'HEAD'. 

この結果、ディレクトリが作成されず、作業ファイルがダウンロードされなくなります。私はこれを解決する可能性のある方法を探し求めましたが、最初はrepoのコピーを得ることができないので、私はできないgit repoにコマンドを発行する方法について話しています。

git clone -b audiofixes git://github.com/dapphp/securimage.gitのようなものを使用してリモートブランチをクローンできることがわかりましたが、私はまだ不正な参照についてエラーが発生し、問題を解決するために実行できるコマンドを見つけられません。私は必要に応じて変更を元に戻します。

それは私が別のブランチのクローンを作成したら、ここでgit branch -aの出力があり、助けの場合:

* audiofixes 
    remotes/origin/2.0.2 
    remotes/origin/3.0 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/audiofixes 
    remotes/origin/securimage_flash 

私は本当に私が状態を修正するために何ができるか(どちらかといえば)見当がつかないこの時点で、リポジトリの

ありがとうございます。

EDIT:要求されたとおりにコマンドが出力されます。

$ ls .git/refs/remotes/origin 
HEAD 

$ ls .git/objects 
info/ pack/ 
# info is empty, pack has pack-b8add06e9a6864ea44a58c06b8bd549eedd90c94.idx and pack-b8add06e9a6864ea44a58c06b8bd549eedd90c94.pack 

$ cat .git/refs/remotes/origin/master 
cat: .git/refs/remotes/origin/master: No such file or directory 

$ cat .git/refs/remotes/origin/HEAD 
ref: refs/remotes/origin/master 
+0

これはGitHubに連絡する必要があります問題のように思えます。 – Amber

+0

@Amber昨晩私はサポートリクエストを送ったが、言葉はまだ戻っていない(これはすばやく何かを期待していたわけではない)が、私は辛抱強く待っている間、私はここでGitの魔法使いと一緒に運をしようと思った。 – drew010

+0

私は興味があります: 'ls .git/refs/remotes/origin'と' cat .git/refs/remotes/origin/master'と 'ls .git/objects'の結果を貼り付けることができるかどうか確認してください –

答えて

2

NEW:

どうやら1)githubのは、SSHアクセス:(を与えるものではありません、と2)それはgitのプロトコルを介して異なるマシン間reflogsを共有することは不可能です。

だからすでにチケットを作成していますが、必ずしもリポジトリを修正する必要はありません。 git reflog masterをサーバーのレポで実行して、結果を貼り付けるだけで必要なのは(アクセス権があるので)アクセスするだけです。そのファイルで、以前のSHA-1の値を探します(現在の値は機能していないようです)。あなたはそれを持っていたら、(私が思う)が(自分のコンピュータ上で)次の操作を行うことができます。

$ git checkout -b temp 
$ git update-ref refs/heads/temp $SHA1 
$ git push -u origin +temp:master 

これは、サーバー上のマージ操作を取り消します。

以前に動作していたSHA1をサーバーから取得しなくても取得できる場合があります。あなたの地元のレポ(またはあなたの友人のローカルレポ)では、以前に働いていたコミットをそこに置いています。それを見つける方法を見つけ出すことができれば、上記の提案を続けることができます。

旧:これは私の最初の考えです。 .git/logsディレクトリをサーバからコピーできる場合は、それ以前のすべての値masterが保存されます。具体的には、ファイル.git/logs/refs/heads/masterは、そのブランチの以前の値を持つ生のテキストファイルになります。例えば(githubのは、あなたがこれを行うかどうかを可能にする場合、私は知らない):

$ git clone https://github.com/dapphp/securimage.git -b audiofixes 
$ scp github.com:/dapphp/securimage.git/logs/refs/heads/master .git/logs/refs/remotes/origin/master 
$ git update-ref refs/remotes/origin/master refs/remotes/origin/[email protected]{1} #see "Date Spec" section of http://book.git-scm.com/4_git_treeishes.html 

理論的にはマスターが以前にあったものに値を変更べきです。しかし、それはローカルでのみ行い、実際に必要なサーバー上の値を実際に変更することはありません。サーバーに直接接続して最後のコマンドを実行するだけであれば、マージを元に戻すだけで問題は解決します(理論的にも)。

これは私が頭の上で考えることができるすべてです。しかし、私は本当にこのようなgitのパズルを解決するのが好きなので、私はそれが私の頭の中に少し長く座ってみましょう:)

+0

私は努力を感謝し、 'scp'コマンドを実行しようとするとエラーが発生します。私は現時点で仕事を辞めなくてはならず、数時間後に家に帰るともう一度やり直します。私は何が起こっているのか分からないが、おそらくgithubはscpを許可しない。 '無効なコマンド: 'scp -f -dapphp/securimage.git''' sshを使ってgit:// URLを複製しているようです。正確なコマンドは' scp [email protected]:/ dapphp/securimage.git/logs/refs/heads/master .git/logs/refs/remotes/origin/master'(見ることができる '-f'オプションはありません)。 – drew010

+0

もう一度助けてくれてありがとう、私はちょうど週末の後にこれについて忘れてしまった。 GHの問題でした。明らかに、バグによってオブジェクトが失われた小さなウィンドウがありました。彼らはコミット前の状態にレポを復元することができ、その後私は再度プッシュし、すべて良好でした。私はあなたの意見をいただきありがとうございます! – drew010