2016-01-28 12 views
6

は、次のような問題を検討しているとして、残りを保つ/ Gitの歴史をコミット:我々は、我々が必要とするオープンソース スカッシュ最初のN

  • に行きたい初期の段階でいくつかの資格情報
  • を含む

    • プライベートプロジェクト歴史に資格証明書を取り除くために
    • 資格情報には、いくつかのマージと
    • 複雑な歴史、などの要求
    • を引っ張らない単一のファイルではなくコードであります私が何をしたいか0

    スカッシュ任意のルートまでのすべてのコミットは大きなものにクリーン状態でコミットは「コミットイニシャル」。

    私は:

    git rebase -i --root 
    

    そして、最初は一緒にコミットスカッシュ:

    pick Initial commit \ 
    fixup dirty1  | 
    fixup dirty2  | Squash these to one, to remove credentials. 
    fixup dirty3  | 
    fixup clean1  /
    pick clean2 
    pick clean3 
    ... 
    ... 
    

    私はすべてをリベースし、すべてが、その後、再び、マージの競合を解決する必要があります。

    N + 1コミット後のマージ競合を含めて、履歴全体を解決することなく最初のN個のコミットをスパーシングすることはできますか。

  • +0

    残念ながら、履歴全体を書き直す方法はありません。これは、clean2が新しい親(squashedコミット)を取得すると、そのハッシュが変更されるためです。つまり、clean3には新しい親があり、その親にはハッシュなどが変更されます。 –

    +0

    これは問題ありません。私はちょうど手動ですべてのマージ競合を再度解決する必要はありません。 – MaxNoe

    +0

    私はあなたの質問をupvotedしましたが、私は歴史の後続のコミットごとに競合の解決に対処しなければならないと思います。私はそれを使ったことはありませんが、これはhttps://www.kernel.org/pub/software/scm/git/docs/git-rerere.html –

    答えて

    0

    git-rerereを使用すると、同じ競合解決を再利用できます。

    の後にもう一度解決する必要がある唯一の欠点は、自動的に解像度を再利用できるようになることです。

    関連する問題