55414


git bashでリベースコマンドでmasterブランチの内容をfeatureブランチへマージすると  
コンフリクトが起きたので対応してgit continueしたのですがまたコンフリクトの表示が  
でます。「feature|REBASE 3/20」という表示もあるのですがこれはどういう意味を  
指すのでしょうか。20/20になるまでコンフリクトの対応をし続けないといけないので  
しょうか。


CC BY-SA 4.0
2019-05-29T13:07:28.560
55350
2019-05-31T16:07:06.937
2019-05-29T13:24:15.947
4236
17348
question
git
GITのリベースコマンドでコンフリクトが起きたときの表示について


> feature|REBASE 3/20

という表示であるということはマージではなく`rebase`を行っていて、"git continue"というのは `git rebase
--continue` のことだと解釈しました。

* * *

> 「feature|REBASE 3/20」という表示もあるのですがこれはどういう意味を指すのでしょうか。

オフィシャルな説明は見つけられなかったのですが、初回conflictが発生した箇所以降全部で`20`コミットがあり、今回処理しようとしているコミットはそのうち`3`つめである、という意味だと思います。

> 20/20になるまでコンフリクトの対応をし続けないといけないので  
>  しょうか。

状況によりますが、最悪だとその通りです。最善の場合はそのconflictを解消すれば残りは何も対応せずにrebaseが成功します。

* * *

似たような状況を再現するスクリプトを作ってみました。

[code]

    #!/bin/bash
    
    mkdir repo-conflict
    pushd repo-conflict
    git init
    git commit --allow-empty -m init
    echo 'hello, world' > hello.txt
    git add hello.txt
    git commit -m 'hello'
    git checkout -b feature
    for i in {1..5}; do
      echo $i >> hello.txt
      git commit -am "put $i"
    done
    
    git checkout master
    echo 'goodbye, world' >> hello.txt
    git commit -am 'goodbye'
    
    git checkout feature
    
[/code]

`repo-conflict` というディレクトリができるので、そこで

[code]

    git rebase master
    
[/code]

を実行すると

> (feature|REBASE 1/5)

の表記を伴ってconflictでrebaseが中断されます。

このときの `hello.txt` の内容は

[code]

    hello, world
    <<<<<<< HEAD
    goodbye, world
    =======
    1
    >>>>>>> put 1
    
[/code]

となってますが、これを

[code]

    hello, world
    goodbye, world
    1
    
[/code]

と編集した後

[code]

    git add hello.txt
    git rebase --continue
    
[/code]

すれば残りは手動対処不要でrebaseが完了します。

そうではなく

[code]

    hello, world
    1
    goodbye, world
    
[/code]

と編集した場合は後続のコミットは自動でマージできないのでconflictが発生し中断されます。


CC BY-SA 4.0
2019-05-31T16:07:06.937
55414
2019-05-31T16:07:06.937
2808
55350
answer