is/was 默认的 git 发散合并策略是什么?

What is/was the default git divergent merge strategy?

我最近开始使用一台新机器,在我早些时候在 Github 上在线解决了一些问题而忘记拉取后,在尝试推送到分支时注意到并注意到了这个错误提示。

所以我拉了,通常当我这样做的时候,我会得到一个有变化的文件列表,需要解决它们,添加它们,然后推送。

不过今天遇到这个就有些不一样了。我收到这条消息

hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.

fatal: Need to specify how to reconcile divergent branches.

每当设置一台新机器时,我以前从未见过这种情况。这是我在其他两台机器上的 .gitconfig,我没有在这台机器上看到这条消息,而我刚看到的那台:

[user]
  name = my name
  email = my email 

[format]
  numbered = auto

[color]
  branch = yes
  diff   = auto
  pager  = yes
  status = auto

我已经做过很多次了,我突然失忆了我不记得 git 的这个 hint/error 曾经(6 年)。这是新的吗?也许我可以看看 gits src 的历史记录?如果不是,默认值是多少?

问题的简短说明:

Git 强制我们选择如何处理远程分支(例如 origin/develop)和本地分支(develop)之间的不同步,因此修改行为和添加此消息是为了提醒您您可能想要更改默认值。

要修复它,我们需要更改默认值 运行 以下内容:

git pull --ff-only

或者作为全局默认事件更好

git config --global pull.ff only

它确实是新的(在 Git 2.27 中部分引入,在 2.29 中修复):您现在可以并且应该将 pull.rebasepull.ff 配置为某些设置.

之前的默认值默认值相当于pull.rebase falsepull.ff true。这使得 git pull 运行 git merge,在可能的情况下进行 fast-forward non-merge“假”合并,或者在不可能的情况下进行真正的合并。

配置 pull.ffonly 使得 git pull 运行 相当于 git merge --ff-only 作为它的第二个命令(前提是你没有变基)。这是我个人的大体喜好,但是我到处都没有Git 2.29或更高版本,所以还是用自己的运行 git fetch,然后四处看看,然后决定并可能使用我的 git mff 别名来执行 fast-forward-only merge 过程。

如果对某人有帮助,可以采用这种替代方式

我不得不面对这个问题。但以下建议对我不起作用

- git config pull.rebase false  
- git config pull.rebase true   
- git config pull.ff only 

OR even adding 'git config --global pull.ff only' not worked

终于用另一种方式解决了这个问题

步骤:

- Create a new branch   // git create branch new_branch
- switch to new branch      // git checkout new_branch
- merge prev_branch to new_branch   // git merge origin prev_branch