【问题标题】:Reverting renames to make git log work again恢复重命名以使 git log 再次工作
【发布时间】:2015-12-25 09:04:40
【问题描述】:

我没有意识到 git 不理解文件重命名(通过设计(!))并移动了一些文件。然后我把它们放回去了。现在 git log 似乎可以工作,但 git log --follow 没有。而 Eclipse 似乎使用后者。 (git log --follow 无法跟随我的重命名。)

所以我想做的就是以某种方式让 HEAD 回到我开始之前的位置。扔掉一切,然后像从未发生过一样继续前进。 (我已经做了一些其他的改变,我只是手动重新做一次,没问题。)

git revert 不是答案。它只会在顶部推送额外的提交,这将完全混淆历史。我需要改变,或者至少从主线中移除。

原来如此

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

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

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

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

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

【问题讨论】:

  • 不是答案,但是: git 确实 理解文件重命名,它只是没有明确记录它们。 git blame 例如,即使在重命名时也能正常工作。考虑使用不同的工具 - Eclipse 的 git 前端很好,但相当基础。
  • 我希望人们不要再说 Git 理解重命名。事实并非如此,Linus 认为需要重命名是旧的颠覆习惯。带有或不带 --follow 的 git log 可能会或可能不会跟随重命名,前提是文件没有被更改或移动太远。但是没有保存实际移动的记录。我没有检查责备,但假设它遵循与 log 相同的逻辑。 Git在这方面被打破了,我没有意识到,因为很多人都说它有效。有一些像gist.github.com/emiller/6769886 这样的重命名技巧,但我避免使用它们!

标签: git git-revert revision-history


【解决方案1】:

如果你还没有推送你的仓库,你可以这样做

git reset <commit-id> --hard

commit-id 是你想要去的提交(每个子提交都会丢失)

【讨论】:

  • 嗯,是的,但我确实推动了。 (我的错,我之前没有提到。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2015-06-22
  • 1970-01-01
  • 2019-08-20
  • 2018-01-17
  • 2018-11-10
相关资源
最近更新 更多