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.rebase
和 pull.ff
配置为某些设置.
之前的默认值默认值相当于pull.rebase false
和pull.ff true
。这使得 git pull
运行 git merge
,在可能的情况下进行 fast-forward non-merge“假”合并,或者在不可能的情况下进行真正的合并。
配置 pull.ff
到 only
使得 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
我最近开始使用一台新机器,在我早些时候在 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.rebase
和 pull.ff
配置为某些设置.
之前的默认值默认值相当于pull.rebase false
和pull.ff true
。这使得 git pull
运行 git merge
,在可能的情况下进行 fast-forward non-merge“假”合并,或者在不可能的情况下进行真正的合并。
配置 pull.ff
到 only
使得 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