git的奇怪行为

Sam*_*ong 6 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  
Run Code Online (Sandbox Code Playgroud)

它应该是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
Run Code Online (Sandbox Code Playgroud)

更新和修复:

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

Fau*_*aux 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 HEADHEAD如果你错了,你会做的很少。

    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并且永远不再谈论这一点。