【问题标题】:JGit rebase keep local files and get conflict files listJGit rebase 保留本地文件并获取冲突文件列表
【发布时间】:2016-10-27 22:38:47
【问题描述】:

我正在尝试从 origin/mybranch 重新设置 mybranch 的基础。我正在使用此代码:

git.pull().setRebase(true).setRemoteBranchName(branch).call();

执行此操作后,冲突文件将使用 cmets 更新,例如

但即使我已提交本地更改,本地更改也会被存储库内容覆盖。

如果我尝试在命令提示符下运行 git 命令“git rebase”而不是调用此函数,本地文件没有得到更新,所以没关系。

后来我尝试了下面的链接方式,

https://github.com/centic9/jgit-cookbook/blob/master/src/main/java/org/dstadler/jgit/porcelain/RebaseToOriginMaster.java

InteractiveHandler handler = new InteractiveHandler() {
    @Override
    public void prepareSteps(List<RebaseTodoLine> steps) {
        for(RebaseTodoLine step : steps) {
            try {
                step.setAction(Action.EDIT);
            } catch (IllegalTodoFileModification e) {
                throw new IllegalStateException(e);
            }
        }
    }

    @Override
    public String modifyCommitMessage(String oldMessage) {
        return oldMessage;
    }
};
git.rebase().setUpstream("origin/"+branch).runInteractively(handler).call();

在此之后,我能够将本地更改保留在 rebase 上,但冲突文件现在被远程存储库值覆盖。

RebaseResult 的“冲突列表”和“失败路径映射”也为空,因此我也无法找到更新的文件。

我在这里做错了什么还是 JGit 的问题。我也没有得到任何合适的文档。

【问题讨论】:

  • 关于您的第二个问题(使用 InteractiveHandler 变基):如果没有独立的 sn-p,就不可能知道变基为什么会这样做。

标签: git rebase jgit


【解决方案1】:

如果您发现 git.pull().setRebase(true) 产生的结果与原生 Git 不同,您应该 file a bug report

请注意,您应该提供一个(失败的)测试用例来断言预期的结果以及使用本机 git 采取的必要步骤。

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    相关资源
    最近更新 更多