2012-02-19 9 views
6

先日、gitでバージョン管理されているプロジェクトでtiny_mceをアップグレードしました。 その時、私は変更のためにgitブランチを作り、ブランチをマスターして削除しました。 すべて正常に機能しました。gitの奇妙な振る舞い

また、リモートのリポジトリを別のサーバーに変更して、.git/configを変更しました。しかし、私は次のようなミスをしたことを知りました。

[remote "new_repo"] 
    url = ssh://[email protected]/~/path/to/myproject.git 
    fetch = +refs/heads/*:refs/remotes/new_repo/* 
[branch "master"] 
    remote = old_repo <= WRONG 
    merge = refs/heads/master 

それは new_repo = リモートでなければなりません。私はそれを後で修正し、うまくいくように見えました。

その後、私が "git status"を実行すると、古いtiny_mceファイルが新しいものを上書きし、それらは変更されたリストにありますがコミットされません。 だから私は "git reset - hard HEAD"をしなければならない。 それは私のプロジェクト(gitで更新)の他のコピーでも起こります。 しかし私はそれを再現することはできません。 ランダムに発生しているようです(パターンがまだ見つかりません)

どうしたらいいですか?

はここに私の「gitのブランチ-a」です:

choir 
* master 
remotes/old_repo/master 
remotes/new_repo/master 

アップデートおよび修正:それは私のRailsアプリケーションはコピーに古いtiny_mceを使用し、新しいものを毎回上書きされているtiny_mce宝石を判明

私は "rake some_task"を実行します。 私はtiny_mceの宝石をアップグレードしました。

+0

あなたはいつもあなたの作業ディレクトリを壊しています。たぶん古い参照のためです(git checkoutブランチでもリモートブランチをチェックアウトできることを覚えておいてください)。 git branch -aコマンドの出力を説明できますか? –

+0

@AlexandrPriymak私は質問を編集して "git branch -a"を追加しました。ありがとう。 –

+0

最近、ローカルのマスターブランチを削除してから、ちょうど「gitチェックアウトマスター」を削除しましたか? –

答えて

1
  1. remotes/old_repo/masterは、マニュアルで名前を変更した結果です。将来的にはgit remote rename、さらにはgit remote set-urlを使用してリモコンを更新すると、これらのすべてのものがクリーンアップされます。

    事実が痛みを伴う後の清掃。 git remote pruneはこれらの問題に対処することになっていますが、リモートがなくなってしまった場合は拒否します。 git branch -dr old_repo/master

  2. git reset --hard HEADあなたのHEADが間違っている場合はほとんど行いません。

    git symbolic-ref HEAD、またはcat .git/HEADで点検してください。git branch -avvを実行してください。これらはあなたのHEADがどこを指しているかを教えてくれます。

    おそらくnew_repo/masterの代わりにold_repo/masterを指しているでしょうか?その場合、reset --hardがコミットされていない変更に対して何をするかを認識していることを前提にして、git reset --hard new_repo/masterとすることができます。

+0

私はどちらかまたは両方を取るか?とにかく、 "git branch -avv"は現在これに似ています。合唱団3a57351 override tiny_mce * master 9c313f3 [ps_git/master] a.txtを削除する remotes/codepremise/master 974b657アップグレードtiny_mce remotes/ps_git/master 9c313f3 a.txtを削除する –