[git] rebase



rebase


mergeレコードを保持しないfast-forward merge方式が好きな場合は、fast-forward mergeができない場合(3ウェイmerge case)、no-fast-forward mergeを行ってmergeレコードを保持する必要はありません.
rebaseを使用してfast-forward mergeを行うことができます.
  • クイック-前方マージできません(3ウェイマージ)

  • 上の画像は現在fast-forward mergeができない3ウェイmerge caseです.
    branch1fに変換すればfast−forwardマージを行うことができる.

    反基地注意点


    もし私がbranch1で一人で働いていたら、いつでも自由にrebaseを行うことができますが、他の開発者と一緒にbranch1で働いている間にrebaseを行うと危険です.
    rebaseを実行すると、コミットされたポインタが変更され、コミットされたポインタ情報が変更されると、既存のコミットを保持するのではなく、表面的に名前と同じ新しいコミットが生成されます.
    この場合、私がrebaseを行うと、コミット情報が他の開発者と異なるために競合する可能性があるので、ブランチを独自に管理する際にrebaseを使用する必要があります.
    実験結果はrebaseがこのブランチから派生したコミットである前にrebaseを行うことは不可能であることを示した.
    上図の例では、branch1はcコミット前にrebaseを行うことができず、以降のコミットでのみrebaseを行うことができる.

    rebaseコマンド

    # in rebase를 진행할 브랜치
    git rebase 브랜치or해시코드
    その後、masterからbranch1までfast−forward mergeを行うことができる.

    # in master
    git merge branch1 #  fast-forward merge 진행

    rebase --onto


    場合によっては、ブランチから派生したブランチをプライマリブランチに再構築する必要があります.

    例えば、上図に示すように、server分岐から派生したclient分岐がある.
    まだテストされていないsever本をclient本に統合するには、master本のrebase本を選択します.
    git rebase --onto master server client
    これは、サーバブランチから派生したクライアントブランチをプライマリブランチにリダイレクトするコマンドです.
    このコマンドを実行すると、--ontoブランチで次のような変更が発生していることがわかります.