私はGitHubリポジトリの管理者です https://github.com/plison/opendial 。リポジトリにはすでに数千のコミットがあり、その多くは簡単にまとめられる可能性のある小さなデバッグ変更(特に数年前のもの)であるため、リポジトリのコミット数を減らしたいと思います。
したがって、コミットの一部をつぶすためにリベースを適用しようとしています。ただし、次の問題が発生しました。
git rebase -i HEAD~10
、インタラクティブエディターで非常に長い数のコミット行(10を超える)を取得します。その理由は何でしょうか?これらの問題を解決するにはどうすればよいですか?リポジトリは、Google Codeでホストされている以前の(SVN)リポジトリから自動的にインポートされたことに注意してください。これまでのところ、変換はうまく機能しているように見えましたが、コミットをリベースしようとすると、なぜこれらのエラーが発生するのでしょうか。
プロジェクトの履歴には、最近多くのマージコミットが含まれているようです(おそらくそれらをコミットしたのでしょう)。通常、対話的にリベースするものにマージコミットが存在すると、問題が発生します。 (インタラクティブなリベースはほぼ線形の履歴を想定していますが、マージコミットは線形ではありません。)
プロジェクトの履歴には、何らかの理由でtwo並列履歴がコミット11b3653でマージされているようです(gitk
やtig
などのツールを使用して、表示されません)よくGithubのWebインターフェイスで)。
並列履歴を削除し、マージコミットを削除するには、まず履歴をフラット化することをお勧めします。次に、厳密に線形の履歴を取得したら、履歴の書き換えを設定して、すべてのデバッグチャーンを削除できます。
これを解決する方法を思い出すために:
エラーメッセージはあまり情報的ではありません。入力した場合
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つのコミットのみが表示されているはずです(これは、先ほど行った強制更新です)。