Странное поведение мерзавца - PullRequest
6 голосов
/ 20 февраля 2012

На днях я обновил tiny_mce в проекте, который управляется версией с помощью git. В то время я сделал для изменения ветку git, слил ее с master и удалил ветку. Все работало нормально.

Кроме того, я изменил удаленный репозиторий на другой сервер и изменил свой .git / config. Но я узнал, что допустил ошибку, подобную следующей.

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

Это должно быть remote = new_repo . Я исправил это позже, и это, казалось, работало хорошо.

Но после этого, если я сделаю "git status", старые файлы tiny_mce будут заменять новые, и они будут в измененном списке, но не будут зафиксированы. Так что я должен "git reset --hard HEAD". Это происходит и в другой копии моего проекта (обновляется через git). Но я не могу воспроизвести это. Кажется, это происходит случайно (или я просто пока не могу найти образец).

Что происходит и как я могу это исправить?

Вот мой "git branch -a":

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

Обновления и исправления:

Оказалось, что драгоценный камень tiny_mce, который использует мое приложение rails, копирует старый tiny_mce и перезаписывает новый каждый раз, когда я запускаю "rake some_task". Я улучшил драгоценный камень tiny_mce.

1 Ответ

1 голос
/ 20 февраля 2012
  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.

    Возможно, он указывает на old_repo/master вместо new_repo/master?Если это так, вы можете (при условии, что вы знаете, что reset --hard делает с вашими незафиксированными изменениями), git reset --hard new_repo/master, и никогда больше об этом не говорить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...