ローカルブランチを完全に破壊してしまったので、やり直したいと思います。サーバー上のバージョンは正しいです。
やり直したくないので、ローカルの履歴を使って私の大失敗を修正したいのです。(必要ならそうします)。
git fetch branchnameや
git pull branchname` はうまくいきません。メッセージは "up to date" ですが、私のローカルのバージョンはサーバーのバージョンと一致しません。
git pull origin/branchname` を実行すると、 "not found" というエラーが表示されます。
まず、現在の位置に新しいブランチを作成します (以前の 'screwed up' の履歴が必要な場合に備えて)。
git branch fubar-pin
リモートブランチのリストを更新し、新しいコミットを同期させます。
git fetch --all
を実行した後、ブランチを origin/branch が指すポイントにリセットします。
git reset --hard origin/branch
注意:この操作を行うと、作業中のツリーから変更が削除されます。
ローカルブランチを台無しにしたときに私がすることは、壊れたブランチの名前を変更し、上流ブランチをチェックアウト/ブランチし直すことです。
git branch -m branch branch-old
git fetch remote
git checkout -b branch remote/branch
そして、古いブランチから何も必要ないことを確認したら、それを削除します。
git branch -D branch-old
しかし、私は通常、古いブランチをローカルに残しておきます。
ローカルブランチには、おそらく破棄したい変更があることでしょう。 そのためには、git reset
を使ってブランチの頭を上流リポのブランチから分岐した最後の場所にリセットする必要があります。 git branch -vを使って上流ブランチの sha1 id を取得し、
git reset SHA1IDを使って自分のブランチをそれにリセットします。 その後で
git checkout` を実行すれば、そのブランチが残した変更をディレクトリから削除できるはずです。
注意: これは常にバックアップされたレポで行ってください。 そうすることで、自分自身で正しく動作したことを確認することができます。 また、そうでなかったとしても、バックアップがあれば元に戻すことができます。
git reset --hard
これは、ローカルの変更をすべて元の頭に戻すためです。