Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:设置merge.ff将永远中断快进合并_Git_Merge_Fast Forward - Fatal编程技术网

Git:设置merge.ff将永远中断快进合并

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

我在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
功能的合并基础是提交
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
的合并基础相同,因此也可以快进而不是合并。