Git警告:push.default未设置;其隐含值正在更改。

72

当我在 Git 中推送到远程时,我收到以下警告:

warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

To **********************************
   6b9a6d2..3ab1eab  master -> master

这个警告是什么意思,应该采取什么措施?


请问您能否提供您的推送命令?您是否忘记了分支 > git push upstream mybranch - aked
3
好的,下面是翻译的内容:参考链接:https://dev59.com/E2cs5IYBdhLWcg3wGQDF#13148313该链接中提供了一个Python代码示例,用于在多个文件中搜索特定文本。该程序使用递归函数和正则表达式来实现。首先,该程序获取用户输入的要搜索的文本和要搜索的目录。然后,该程序遍历指定目录中的所有文件,并在每个文件中查找匹配用户输入的文本的行。如果找到匹配的行,则将其打印出来。该程序还考虑了一些边缘情况,例如当指定目录不存在或无法访问时,它会给出相应的错误信息。此外,在处理二进制文件时,该程序会跳过它们并打印一条警告消息。总之,该程序可以方便地帮助用户在大量文件中查找特定文本。 - aked
注意:消息将很快在Git 2.0(2014年第二季度)中更新。请参阅我的回答下方 - VonC
2
可能是[警告:push.default未设置;其隐含值在Git 2.0中正在更改]的重复问题。(https://dev59.com/E2cs5IYBdhLWcg3wGQDF) - S.L. Barth
注意:git 2.8(2016年3月)将完全删除该警告。请参见下面的我的编辑答案 - VonC
4个回答

96

这个警告是在Git 1.7.11推出的simple样式的推送一起引入的。问题在于当前的默认设置matching可能导致经验不足的用户在某些分支落后于其远程等价物时强制推送,因为这些分支没有更新。结果就是他们会倒回分支并有可能丢失自己或别人的工作。新的simple模式被引入作为新的push.default行为,并将成为Git 2.0的默认设置(希望在明年早些时候发布)。

新的simple行为很像upstream设置: 只有当前正在使用的分支正在跟踪远程分支时才会推送它。它增加了一个额外的条件: 远程分支必须与本地分支同名。

如你所发现,解决这个消息的方法是设置push.default。要获取新的行为,请使用:

git config --global push.default simple

要获取 Git 的默认行为但避免警告消息,请使用:

git config --global push.default matching

我真的建议不要使用匹配功能。一般来说,大多数人都希望使用新的simple行为或者使用upstream


11
2016年2月更新: git 2.8 (2016年3月) 已经移除了那个大的警告信息
请参见commit 2f27520 (2016年2月25日)由Matthieu Moy (moy)提交。
(由Junio C Hamano -- gitster --commit 15be621于2016年2月26日合并)

push: 移除 "push.default未设置" 警告信息

这个警告在2.0转换之前非常重要,在此之后一段时间仍然很重要,因此新用户会在其配置中明确地获得push.default,并且如果他们曾经使用过旧版本的Git,则不会遇到不一致的行为。

这个警告从1.8.0版本(2012年10月)开始就一直存在,因此我们可以期望当前大多数Git用户已经接触过它,并且他们中的大多数已经明确设置了push.default。从'matching'到'simple'的转换计划于2.0(2014年5月),但实际上只发生在2.3(2015年2月)。

今天,这个警告主要被初学者看到,他们还没有设置自己的push.default配置。对于他们中的许多人来说,这个警告是令人困惑的,因为它谈论了他们尚未学习的概念,并要求他们做出他们目前无法做出的选择。例如,请参见“Warning: push.default is unset; its implicit value is changing in Git 2.0”(截至撰写本文时,该问题有1260票,答案有1824票)

完全删除警告以避免干扰初学者。仍然偶尔使用旧版本Git的人将通过这个旧版本接受警告。

最终,没有警告的Git版本将被部署足够多,教程将不再需要建议设置push.default


原始答案(2014年3月)

这个警告将在git 2.0(2014年第二季度)中很快改变,使用提交 289ca27提交 11037ee

push.default未设置; 在Git 2.0中,它的隐含值从“匹配”更改为“简单”。
要消除此消息并保持传统行为,请使用:

git config --global push.default matching

为了消除此消息并立即采用新行为,请使用以下命令:
git config --global push.default simple

push.default设置为'matching'时,Git会将本地分支推送到已经存在同名远程分支上。
从Git 2.0版本开始,Git默认采用更加保守的'simple'行为,仅将当前分支推送到对应的远程分支,该远程分支是用来更新当前分支的'git pull'的。
请参阅"为什么在Git中匹配是默认推送方式?"了解更多。

2
我通过提供远程仓库名称和已跟踪的远程分支名称来解决这个问题。
在我的情况下,在 GitHub 上,运行以下命令: $ git push origin main

0

我之前也遇到了同样的问题。我通过以下方式解决了这个问题:

  • 首先克隆我的新分支(UAT)
  • 然后将其推送到该分支(UAT)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接