git的奇怪行为

时间:2012-02-19 20:09:35

标签: git

前几天,我在一个用git控制版本的项目中升级了tiny_mce。 那时,我为更改创建了一个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

更新和修复:

事实证明,我的rails应用程序使用的tiny_mce gem会复制旧的tiny_mce并在每次运行“rake some_task”时覆盖新的。 我升级了tiny_mce gem。

1 个答案:

答案 0 :(得分: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出错,
  3. HEAD会做的很少。

    使用git symbolic-ref HEADcat .git/HEAD进行检查,或者更好地运行git branch -avv。这些将告诉您HEAD指向的位置。

    它可能指向old_repo/master而不是new_repo/master?如果是这样,您可以(假设您知道reset --hard对未提交的更改有什么作用),git reset --hard new_repo/master,并且再也不会谈到这一点。