在使用
git config pull.rebase false # merge (the default strategy)
和
git config pull.ff true
如果可能的话,两个命令都快进,如果不是合并。我应该使用哪个配置?
evrscar21#
当git在git pull期间必须协调本地分支中的更改时,这两个设置都作用于git pull的行为,但它们并不旋转同一个旋钮。
git pull
pull.ff
false | true | only
它匹配cli选项:--no-ff | --ff | --ff-only,如果在命令行中传递了这些选项中的任何一个,则会忽略config设置。如果设置为only,如果远程分支不在本地分支的正前方,git pull将拒绝执行任何操作,因此pull.rebase设置永远不会生效--除非配置设置被命令行上的标志覆盖。
--no-ff | --ff | --ff-only
only
pull.rebase
false | true | interactive | merges
它与cli选项--rebase[=false|true|merges|interactive]匹配,再次:如果在命令行中传递了这些选项中的任何一个,则忽略config设置。如果它被设置为“使用rebase来合并更改”(例如:true|interactive|merges),那么声明--ff或--no-ff的设置就没有任何效果--反正不会有合并。
--rebase[=false|true|merges|interactive]
true|interactive|merges
--ff
--no-ff
这个问题取决于上下文-例如:如果您的员工的工作流特别支持某个操作,请将默认值设置为该操作;如果您习惯于特定的操作序列,请将默认值设置为您的用法。我不会回答你的问题,我会描述我是如何工作的:我个人并不喜欢使用git pull,因为你需要一次性地“从中央存储库中获取你不知道的更改,并将它们与你的工作合并”,而没有机会查看两个步骤之间的更改。我一般跑:
git fetch
git log --graph --oneline origin/master my/branch
git rebase origin/master
git merge origin/master
rebase
我还为pull --ff-only设置了一个别名,因为这个别名是“无害的”(例如:你知道git不会弄乱你的代码,如果你运行它,它要么做一些琐碎的事情,要么停下来说“这不是快进”),并用它来更新不是我的分支。
pull --ff-only
vd2z7a6w2#
如果可能,两个命令都快进实际上,当设置为only时,如果当前分支的尖端不能快进,pull.ff将 * 拒绝 * 拉取。而pull.rebase只是指示pull进行合并(快进与否)。就我个人而言,我总是使用git config --global pull.rebase true,以便在刷新的远程跟踪分支上重基(重播)我的本地提交(尚未推送)。有什么意义的相似的命令因为这两种设置实现的目标不同:
pull
git config --global pull.rebase true
2条答案
按热度按时间evrscar21#
当git在
git pull
期间必须协调本地分支中的更改时,这两个设置都作用于git pull
的行为,但它们并不旋转同一个旋钮。pull.ff
可以设置为false | true | only
。它匹配cli选项:
--no-ff | --ff | --ff-only
,如果在命令行中传递了这些选项中的任何一个,则会忽略config设置。如果设置为
only
,如果远程分支不在本地分支的正前方,git pull
将拒绝执行任何操作,因此pull.rebase
设置永远不会生效--除非配置设置被命令行上的标志覆盖。pull.rebase
可以设置为false | true | interactive | merges
。它与cli选项
--rebase[=false|true|merges|interactive]
匹配,再次:如果在命令行中传递了这些选项中的任何一个,则忽略config设置。如果它被设置为“使用rebase来合并更改”(例如:
true|interactive|merges
),那么声明--ff
或--no-ff
的设置就没有任何效果--反正不会有合并。这个问题取决于上下文-例如:如果您的员工的工作流特别支持某个操作,请将默认值设置为该操作;如果您习惯于特定的操作序列,请将默认值设置为您的用法。
我不会回答你的问题,我会描述我是如何工作的:
我个人并不喜欢使用
git pull
,因为你需要一次性地“从中央存储库中获取你不知道的更改,并将它们与你的工作合并”,而没有机会查看两个步骤之间的更改。我一般跑:
git fetch
git log --graph --oneline origin/master my/branch
(例如:检查我感兴趣的远程分支的状态)1.运行
git rebase origin/master
或git merge origin/master
(我们碰巧有一个支持rebase
的工作流,但无论如何:我已经知道这个动作有多复杂了)与
git pull
的区别在于,在步骤3,我可以做:我还为
pull --ff-only
设置了一个别名,因为这个别名是“无害的”(例如:你知道git不会弄乱你的代码,如果你运行它,它要么做一些琐碎的事情,要么停下来说“这不是快进”),并用它来更新不是我的分支。vd2z7a6w2#
如果可能,两个命令都快进
实际上,当设置为
only
时,如果当前分支的尖端不能快进,pull.ff
将 * 拒绝 * 拉取。而
pull.rebase
只是指示pull
进行合并(快进与否)。就我个人而言,我总是使用
git config --global pull.rebase true
,以便在刷新的远程跟踪分支上重基(重播)我的本地提交(尚未推送)。有什么意义的相似的命令
因为这两种设置实现的目标不同:
pull.ff
设置为only
不允许快进pull
:这是在 mergepull
上要做事情。pull.rebase
设置为true,则pull.ff
无关紧要:if是关于在pull
上做什么(合并?还是变基?)