我在Git(版本2.10.1(Apple Git-78((中遇到了一个非常奇怪的问题。
似乎如果我曾经在本地存储库配置中将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
设置,因此应应用默认值。但是提交被创建。
我想要什么:在我的存储库中再次进行快进提交。有没有办法得到这个?
我认为此合并不应创建提交,因为没有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>
就会添加一个空的。