我在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
设置,因此应该应用默认值。但是提交已经创建了。
我想要的是:快进提交在我的回购中再次运行。有没有办法得到这个?
答案 0 :(得分:2)
我认为这个合并不应该创建提交,因为没有merge.ff设置,所以默认应该适用。但是提交已经创建了。
默认情况下,如果可能,快进 ,否则进行合并提交。
现在需要合并提交,因为图形如下所示:
* 4667bf7 (feature) commit
| * 6663675 (HEAD -> master) Merge branch 'feature'
| |\
| |/
|/|
* | c12b7b3 commit
|/
* 3c62604 commit
master
和feature
的合并基础是提交c12b7b3...
:
$ git merge-base master feature
c12b7b3f68caf419c3088fae293c57cfed147f34
且feature
的提示为4667bf7
,master
的提示为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 >