web-dev-qa-db-ja.com

git rebaseのエラー(「適用できませんでした...」)

私はGitHubリポジトリの管理者です https://github.com/plison/opendial 。リポジトリにはすでに数千のコミットがあり、その多くは簡単にまとめられる可能性のある小さなデバッグ変更(特に数年前のもの)であるため、リポジトリのコミット数を減らしたいと思います。

したがって、コミットの一部をつぶすためにリベースを適用しようとしています。ただし、次の問題が発生しました。

  1. 入力するときgit rebase -i HEAD~10、インタラクティブエディターで非常に長い数のコミット行(10を超える)を取得します。その理由は何でしょうか?
  2. さらに重要なことは、リベースを開始するためにインタラクティブエディターを閉じると、コミットに変更を加えなくても、体系的にエラーメッセージ「error:could not apply」、が表示されることです(つまり、すべての行を「選択」のままにして、変更や並べ替えを行わない場合)。

これらの問題を解決するにはどうすればよいですか?リポジトリは、Google Codeでホストされている以前の(SVN)リポジトリから自動的にインポートされたことに注意してください。これまでのところ、変換はうまく機能しているように見えましたが、コミットをリベースしようとすると、なぜこれらのエラーが発生するのでしょうか。

36
Pierre Lison

プロジェクトの履歴には、最近多くのマージコミットが含まれているようです(おそらくそれらをコミットしたのでしょう)。通常、対話的にリベースするものにマージコミットが存在すると、問題が発生します。 (インタラクティブなリベースはほぼ線形の履歴を想定していますが、マージコミットは線形ではありません。)

プロジェクトの履歴には、何らかの理由でtwo並列履歴がコミット11b3653でマージされているようです(gitktigなどのツールを使用して、表示されません)よくGithubのWebインターフェイスで)。

並列履歴を削除し、マージコミットを削除するには、まず履歴をフラット化することをお勧めします。次に、厳密に線形の履歴を取得したら、履歴の書き換えを設定して、すべてのデバッグチャーンを削除できます。

17
Greg Hewgill

これを解決する方法を思い出すために:

エラーメッセージはあまり情報的ではありません。入力した場合

git rebase --continue

このエラーは、gitが単独では解決できないマージ競合のためであり、あなたの助けが必要であることに気付きます。

お気に入りのエディター/ IDEでマージの競合を解決します(ヒント:これはiで始まり、ntelliJで終わるはずです)

マーク解像度

git add .

すべての競合が解決されると、次のように表示されます。

(all conflicts fixed: run "git rebase --continue")

だからリベースを続けます

git rebase --continue

うまくいけば、リベースが成功するはずです

git status

ショー:

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

git pullをしないでください。上書きすると、マージの競合のみが上書きされます。代わりに、マージ競合解決をブランチにプッシュします)

git Push --force

できました! gitログには、現在1つのコミットのみが表示されているはずです(これは、先ほど行った強制更新です)。

46
Somaiah Kumbera