Git:设置merge.ff永远打破快进合并

时间:2017-08-09 00:03:55

标签: git merge fast-forward

我在Git中遇到了一个非常奇怪的问题(版本2.10.1(Apple Git-78))。

似乎如果我曾经在本地repo配置中将merge.ff设置为false,那么这个回购无法回复。我无法解除它。

以下是重现的步骤:

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 个答案:

答案 0 :(得分:2)

  

我认为这个合并不应该创建提交,因为没有merge.ff设置,所以默认应该适用。但是提交已经创建了。

默认情况下,如果可能,快进 ,否则进行合并提交。

现在需要合并提交,因为图形如下所示:

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

masterfeature的合并基础是提交c12b7b3...

$ git merge-base master feature
c12b7b3f68caf419c3088fae293c57cfed147f34

feature的提示为4667bf7master的提示为6663675。这两个提示都不等于合并基础,因此需要合并。

您的配置正常:

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

(相当令人讨厌,但无害,git config在那里留下一个虚假的[merge]部分;每个额外的git config merge.<whatever>在空的时候添加另一个。{/ p >