2015-09-28 97 views
0

我没有意识到,git不理解文件重命名(由设计(!)),并移动了一些文件。然后我把它们放回去。现在git日志似乎工作,但git日志 - 关注不。 Eclipse似乎使用后者。 (git log - follow跟不上我的重命名。)恢复重命名,使git日志再次工作

所以我想要做的是以某种方式让HEAD回到我开始之前的位置。扔掉一切,然后向前移动,好像它从未发生过一样。 (我做了一些其他更改,因为我只是再次手动制作它们,没有问题。)

git revert不是答案。它只会推动额外的提交,这将完全混淆历史。我需要的变化已经消失了,或者至少从主线出发。

所以我做了

git branch moveDead 
git reset --hard 4902b024588678cd493929955f79c6405f6dab9d 
git branch beforeMoves 

都很好。 (分支仅供将来参考)

但是我现在不能推动,因为我推动了重命名的文件,没有意识到当时的危险。我需要重置遥控器。

我是这个存储库的主要开发人员,所以也许我们可以从备份中恢复主要的git存储库,然后将其向前移动,但那会很糟糕。

(有没有分支机构或其他复杂的因素。)

+0

不是答案,但:git _does_理解文件重命名,它只是没有明确记录它们。例如'git blame'可以在重命名的情况下工作得很好。考虑使用不同的工具 - Eclipse的git前端很好,但相当基础。 – sleske

+1

我希望人们不要再说Git理解重命名。它没有,并且Linus认为重新命名的需要是旧的颠覆习惯。 git log有或没有--follow可能会也可能不会遵循重命名,前提是这些文件没有被更改,也没有移动太远。但是没有保存实际行动的记录。我没有检查责备,但推测它遵循与日志相同的逻辑。 Git在这方面被打破了,我没有意识到,因为有那么多人说它是有效的。 有一些像https://gist.github.com/emiller/6769886重命名黑客,但我避免它们! – Tuntable

回答

1

如果您还没有推你的版本库中,你可以做

git reset <commit-id> --hard 

其中commit-id是承诺,你想去(每个孩子提交都会丢失)

+0

嗯,是的,但我确实推了。 (我的错,我没有提到过。) – Tuntable