Git:设置merge.ff将永远中断快进合并
我在Git(版本2.10.1(Apple Git-78))中遇到了一个非常奇怪的问题 似乎如果我曾经在本地回购配置中将Git:设置merge.ff将永远中断快进合并,git,merge,fast-forward,Git,Merge,Fast Forward,我在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 comm
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
和功能的合并基础是提交c12b7b3…
:
$ git merge-base master feature
c12b7b3f68caf419c3088fae293c57cfed147f34
功能的提示是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。
在有空的部分时会添加另一个。)谢谢您的回复。但我不明白的是:如果我省略了git配置--add merge.ff false
和--unset all merge.ff
,那么所有这些合并都是快速进行的。为什么?如果第一个op是快进的,它不会创建合并提交。查看上图:位于合并基础c12b7b3
之前的master
上的提交本身就是我们在master
上进行的合并提交。如果我们不在master
上进行合并提交(如果我们改为进行快进非合并),则master
的名称将指向c12b7b3
,随后的git合并功能也将指向(允许快进而不是合并)您会发现,master
的当前提示与master
和feature
的合并基础相同,因此也可以快进而不是合并。