【问题标题】:Gerrit/git: rename java class to existing (remove middleman)Gerrit/git:将 java 类重命名为现有(删除中间人)
【发布时间】:2013-03-30 11:13:14
【问题描述】:

我们使用 git,Gerrit 作为代码审查工具,我们有一个模型类 (MyModelImpl) 和关联的接口 (MyModel)。我们已经意识到这个设置太过分了,所以我们想删除这个接口。我们还希望在代码中保留 MyModel 类名。所以我们要删除“MyModel.java”并将“MyModelImpl.java”重命名为“MyModel.java”,并更改内容以使所有内容都能编译。我们希望保持以前称为“MyModelImpl.java”的文件的历史完整。

是否可以在一次提交中执行此操作?

我们当然试过了,我们在Gerrit中看到的是“MyModelImpl.java”被移除了,“MyModel.java”被彻底改变了。并且“MyModelImpl.java”的历史丢失了。

我们希望在单个提交中执行此操作,因为仅删除“MyModel.java”会导致提交无法编译,并且在提交时将所有使用的 MyModel 转换为 MyModelImpl,然后使用 MyModelImpl 进行第二次提交重命名为 MyModel 会导致大量提交(主要是相互抵消),这对代码审查来说是一件痛苦的事情。

【问题讨论】:

    标签: java git rename gerrit


    【解决方案1】:

    您的第一种方法是完全正确的——MyModel.java 的历史记录应该仍然完好无损。但是,您不能运行git log MyModel.java,而是运行git log --follow MyModel.java。如果您对第二种方法感觉更舒服,您可以通过交互式 rebase:git rebase -i“压缩”提交(使多个提交一次提交)。不过,在您的情况下,这应该不是必需的。如果您决定不使用git rebase,您仍然应该阅读有关它的手册页。这是一个很棒的命令!

    【讨论】:

    • 是的,我们最终使用了前一种方式——一个没有编译的提交,所以我们不得不通过 Gerrit 强制它。我认为 squashing 在这里不会有帮助 - 一个 squashed 提交与我们一开始就在一个提交中完成所有操作是一样的。我同意 rebase 是一个很棒的命令 - 一直使用它:)
    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2021-11-23
    相关资源
    最近更新 更多