git rebase出错("无法应用......")

Pie*_*son 38 git github git-svn rebase git-rebase

我是GitHub存储库https://github.com/plison/opendial的管理员.我想减少存储库中的提交数量,因为存储库已经有几千个提交,其中许多是可以轻松压缩在一起的小调试更改(特别是几年前的那些).

因此,我正在尝试应用变基,以便压缩我的部分提交.但是,我遇到了以下问题:

  1. 当我输入例如git rebase -i HEAD~10,我在交互式编辑器中获得了相当多的提交行(远远超过10).可能是什么原因?
  2. 更重要的是,一旦我关闭交互式编辑器以启动变基,我系统地得到错误消息"错误:无法应用",即使我没有对提交进行任何更改(即,如果我将所有行保留为'pick' ,无需任何修改或重新排序).

我该如何解决这些问题?应该注意的是,存储库是从Google Code上托管的先前(SVN)存储库自动导入的.到目前为止转换似乎运行良好,但我想知道为什么我在尝试重新提交我的提交时会遇到这些错误.

Som*_*era 50

提醒自己如何解决这个问题:

错误消息不是很有用.如果你输入

git rebase --continue
Run Code Online (Sandbox Code Playgroud)

你意识到错误是由于git无法自行解决的合并冲突,需要你的帮助.

在您喜欢的编辑器/ IDE中解决合并冲突(提示:这应该以i开头并以ntelliJ结尾)

标记分辨率

git status
Run Code Online (Sandbox Code Playgroud)

如果所有冲突都得到解决,您应该看到如下内容:

git add .
Run Code Online (Sandbox Code Playgroud)

所以继续你的改变

(all conflicts fixed: run "git rebase --continue")
Run Code Online (Sandbox Code Playgroud)

希望你的rebase现在应该成功

git rebase --continue
Run Code Online (Sandbox Code Playgroud)

说明:

git status
Run Code Online (Sandbox Code Playgroud)

不要做一个git pull.如果这样做,您将只覆盖合并冲突.而是将合并冲突解决方案推送到分支机构

On branch feature/DIG-19302-Upgrade-mockito-v2
Your branch is behind 'origin/feature/your-feature-branch' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)

nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

你完成了!您的git日志现在应该只显示1次提交(这是您刚刚执行的强制更新)

  • 我有点好奇; vim以什么语言开头,以ntelliJ结尾? (10认同)

Gre*_*ill 18

您的项目的历史记录似乎最近包含了许多合并提交(大概是你做的那些).您希望以交互方式重新绑定的合并提交的存在通常会导致问题.(交互式rebase几乎假设线性历史记录,但合并提交不是线性的.)

你的项目历史也似乎有两个并行的历史,它们在提交11b3653中合并在一起(使用像gitktig看到这个工具,它在Github的Web界面上没有很好地显示).

我建议您先尝试展平历史记录以摆脱并行历史记录,并删除合并提交.然后,一旦有了严格的线性历史记录,就可以设置重写历史记录以删除所有调试流失.

  • 有趣的是,大多数答案扁平git历史是推荐git rebase但使用git rebase来解决错误与git rebase使事情变得复杂:)我想将提交分组为几个组,只有选项似乎git squash与原始提交的给定作者合并. (7认同)