Gitの致命的:参照の形式が無効です: 'refs / heads / master


101

リポジトリのDropbox同期に使用していgitますが、試行するとpushエラーが発生します。

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'

したがって、Dropboxが競合を検出してコピーを作成したようです。わかりました。問題がないので、競合するファイルを削除しました。それでも、上記のgitエラーが発生します。

$ git checkout master
    M   index.html
    Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
    [master ff6f817] Cleanup repo
    1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
    fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

どうすれば修正できますか?ありがとう。

回答:


178

これらのコマンドは元に戻せないため、これについて確信がない場合は、リポジトリのバックアップを作成してください。

まず、repoディレクトリに移動します。

cd myrepo

次に、競合するファイルを再帰的に検索して削除します

find . -type f -name "* conflicted copy*" -exec rm -f {} \;

最後に、gitのpacked-refsファイルから「矛盾する」参照を削除します

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs

1
私は同じ問題を抱えていましたが、これで修正されました。ありがとうございました!
erik 2016

これで修正されました。ありがとうございました!
cecconeurale

1
macosユーザー向けfind . -type f -name "* conflicted copy*" -delete
Soyoes

42

競合するファイルは複数の場所にある可能性があります。

.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/

または、.gitサブディレクトリ内のあらゆる場所を調べることもできます。find . -name '*conflicted*'

または、そうでない場合は、アクティブなブランチをリストし、不審なものgit branch -aを削除(git branch -d)します。


内の至る所に競合するファイルがあります.git。私はそれらをすべて実行して削除し、修正しました。ありがとう。
Justin

2
@Justin Gladお手伝いできました。この回答または他の回答で問題が解決した場合は、承認済みとしてマークしてください。
Marco Leogrande、2012年

2
Mac OS Xの場合:(find . -name '*conflicted*'編集:フォーマット)
xgMz

1
@xgMzおかげで、あなたのソリューションは一般的な有効性を持っているので、私の答えを更新します。
マルコレオグランデ2013

1
シンプルな方法findで、1つの競合するファイルを取得し、2つの問題を手動で修正しましたmv。これをゆっくりと段階的に推論するのが最も安全な方法です。
pid

8

これは、Dropboxが更新される前に、同僚が変更をプッシュしてPCをシャットダウンしたときにも発生します。

私はそれをとても簡単に解決しました。

競合するコピーを削除しただけです。(XXXXの競合するコピーyyyy-mm-dd)

普通に引っ張ってください。

失敗する前に私の同僚が変更を加えたことに注意してください。そして彼は彼の変更を再び押します。今回はシャットダウンしません。:)



1
これは私のために働いた!/ refs / headsフォルダー内の名前に「競合するコピー」が含まれるファイルがあり、それを削除してから、プル/プッシュし、すべて正常です。ありがとう!
DiscDev 2014年

7

競合するすべてのファイルを.gitフォルダーから削除できましたが、存在しなくなったファイルに関するエラーが発生し続けました。

私にとっての修正は.git/refs/packed_refs、 "conflicted"というテキストを含む行を開いて削除することでした。


1

私にとってはそれはエラーを出していました: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

/.git/packed_refsファイルに移動して、次の行を削除できますrefs/tags/r0.2:3

それからそれは働き始めました。しかし、なぜそれが最初に起こったのかはわかりません。


0

git checkout master最初に、健全で名前の付いたブランチにアクセスしてください。


元の投稿の出力を更新しました。
ジャスティン

うーん、フルを試してみgit push origin masterて、出力を貼り付けてgit branch -aください。
突く

ここで同じエラー...試行するとgit branch -a、この非常にエラーが発生します!
trusktr 2014年

問題はリモートリポジトリにあるため、プルまたはチェックアウトしても解決しません。上記の他の回答は、リモート上のファイルを直接修正して完全に機能することを示しています。あなたのアドバイスはとても良いですが、それは問題への答えではありません。
PID

0

同じエラーが発生しました

致命的:参照の形式が無効です: 'refs / heads / somebranch(1)'

次のコマンド

git branch

次に、次のコマンドを使用して、誤った名前(ブランチ名の後に(1)が続く)を検索しました

find . -name 'somebranch (1)'

そして以下の結果を示した

./.git/refs/heads/somebranch(1)

これはsomebranch IMOの複製バージョンです。そこで、deleteの後にfindコマンドを実行してこれを削除しました

find . -name 'somebranch (1)' -print -exec rm -rf {} \;

次に、ブランチコマンドが正常に実行されます

git branch

0

次のような同様のエラーが発生しました

fatal: Reference has invalid format: 'refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)'

.git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)リモートDropboxリポジトリ内のファイルを削除するだけで問題は解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.