2017-08-09 2 views
0

Git(バージョン2.10.1(Apple Git-78))で非常に奇妙な問題が発生しました。Git:merge.ffを設定すると、早送りマージが永久に中断されます

ローカルリポジトリ設定でmerge.fffalseを一度設定した場合、このレポの返信方法はありません。私はそれを解除できません。ここで

は再現する手順は、次のとおりです

git init 

# Set merge.ff 
git config --add merge.ff false 

# Add some content and commit. 
echo '.' >> file.txt 
git add file.txt 
git commit -am "commit" 

# Create a new branch. 
git branch feature 

git checkout feature 
echo '.' >> file.txt 
git commit -am "commit" 
git checkout master 
git merge feature 

このマージメッセージでコミット作成 - 予想通り。

私はこの設定を解除しました。将来の早送りコミットは余分なコミットを作成しないと考えています。しかし驚くべきことに、それはうまくいきません。

git config --unset-all merge.ff 

git checkout feature 
echo '.' >> file.txt 
git commit -am "commit" 
git checkout master 
git merge feature 

そこにはmerge.ff設定がされていないので、デフォルトが適用されなければならないので、私は、このマージコミットを作成するべきではないと仮定と思います。しかし、コミットが作成されます。

私が望むもの:私のレポで早送りコミットをもう一度行います。これを得る方法はありますか?

答えて

1

merge.ff設定がないので、このマージはコミットを作成しないと仮定します。そのため、デフォルトが適用されます。しかし、コミットが作成されます。

デフォルトは早送りする可能ならば、そうでない場合は、マージコミットすることです。

Aコミットマージグラフは次のように見えるので、今必要である:

* 4667bf7 (feature) commit 
| * 6663675 (HEAD -> master) Merge branch 'feature' 
| |\ 
| |/ 
|/| 
* | c12b7b3 commit 
|/ 
* 3c62604 commit 

masterfeatureのマージベースはc12b7b3...コミットである:

$ git merge-base master feature 
c12b7b3f68caf419c3088fae293c57cfed147f34 

featureの先端が4667bf7ありますmasterの先端は6663675である。これらの2つのヒントのどちらもマージベースと同じではないため、マージが必要です。

あなたの設定はOKです:

$ git config --get merge.ff 
$ cat .git/config 
[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
[merge] 

(それはgit configがそこに偽の空[merge]節を残していること、むしろ不快だが、無害;空の1があるとき、すべての追加git config merge.<whatever>は別のものを追加します。)

+0

あなたの返事をありがとう。しかし私が理解できないこと: 'git config --add merge.ff false'と' --unset-all merge.ff'を省いた場合、これらのマージ*は全て早送りです。どうして? –

+0

最初のopが早送りの場合、マージコミットは作成されません。上のグラフを見てください。マージベース 'c12b7b3'より前の' master'にあるコミット自体が 'master'で行ったマージコミットです。 'master'でマージコミットをしない場合(早送り非マージを行う場合)、' master'という名前は 'c12b7b3'を指し、その後の' git merge feature'(マージの代わりに早送りが許可されていると)、 'master'の現在のtipは' master'と 'feature'のマージベースと同じであるため、マージの代わりに早送りすることができます。 – torek

関連する問題