1

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

看来,如果我曾经在本地 repo 配置中设置merge.fffalse,那么这个 repo 就没有办法回来了。我只是无法取消它。

以下是重现的步骤:

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设置,所以应该应用默认值。但是提交被创建。

我想要什么:让快进提交在我的仓库中再次工作。有没有办法得到这个?

4

1 回答 1

2

我假设这个合并不应该创建一个提交,因为没有 merge.ff 设置,所以应该应用默认值。但是提交被创建。

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

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

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

master和的合并基础feature是 commit c12b7b3...

$ git merge-base master feature
c12b7b3f68caf419c3088fae293c57cfed147f34

feature是的尖端,存在4667bf7的 尖端. 这两个技巧都不等于合并基础,因此需要合并。master6663675

你的配置没问题:

$ 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>增加一个部分就会增加一个。)

于 2017-08-09T01:02:59.800 回答