Git 2.0 更改 push default 为‘simple’

Git 2.x中默认的push行为从'matching'更改为'simple'。'matching'会在未指定分支时推送所有匹配分支;'simple'则只推送当前分支。可通过配置命令选择行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你最近更新了 Git,你可能会在执行 git push 时看到如下消息:
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


[b][size=x-large]Matching[/size][/b]
‘matching’ 参数是 Git 1.x 的默认行为,其意是如果你执行 git push 但没有指定分支,它将 push 所有你本地的分支到远程仓库中对应匹配的分支。

[b][size=x-large]Simple[/size][/b]
而 Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。

[b][size=x-large]修改默认设置[/size][/b]
从上述消息提示中的解释,我们可以修改全局配置,使之不会每次 push 的时候都进行提示。对于 matching 输入如下命令即可:
git config --global push.default matching

而对于 simple ,请输入:
git config --global push.default simple


文章引用自:[url]http://www.oschina.net/news/45585/git-2-x-change-push-default-to-simple[/url]
<think>嗯,用户这次问的是在没有显式指定分支的情况下如何执行gitpush操作。从用户提供的参考资料来看,ta应该已经查阅了Git分支推送的相关机制,尤其是push.default配置和无参数推送的行为。用户可能是个中级Git使用者,知道基本的分支操作,但对默认配置和隐式行为不熟悉。ta在尝试简化工作流程时遇到了困惑,比如在频繁切换分支时希望省去重复输入分支名的操作。深层需求其实是提高日常Git操作的效率。这个问题需要拆解几个关键点:一是理解无参数推送时的隐含行为,二是掌握push.default的多种配置差异。从引用资料2和3来看,核心在于push.default这个配置项,它控制着当branch参数缺失时的默认推送行为。用户提供的参考资料3特别有价值,它解释了branch.<name>.merge配置与pull行为的关系,但push行为的关联性同样重要。实际上gitpush-u就是通过设置这个信息来实现未来无参数推送的。考虑到用户的需求场景,应该重点解释simple和upstream这两种最常用的配置模式。前者是Git2.0后的默认设置,安全性更高;后者适合需要推送到与拉取不同分支名的场景。引用1提到的-u参数设置上游分支正是解决这个问题的关键操作。需要特别提醒用户matching模式的风险,虽然引用资料没直接提及,但它在历史项目中常见。若用户工作在多分支环境,无意中push--force可能导致灾难性后果,必须强调谨慎操作。</think> 理解您的问题:当执行 `git push` 时不显式指定分支名,Git 的行为取决于您的配置和上下文。以下是关键点: 1. **`push.default` 配置 (核心机制)**: 这是 Git 的全局或仓库级配置项 (`git config push.default`),决定 `git push` 无参数时的默认行为。常见值: * **`simple` (默认值,推荐)**:将 **当前分支** 推送到其 **上游 (upstream) 分支**。上游分支必须存在且同名。这是最安全、最常用的设置。 ```bash git config --global push.default simple ``` * **`current`**:将 **当前分支** 推送到远程仓库的 **同名分支** (无论上游设置如何)。 * **`upstream`**:将 **当前分支** 推送到其设置的 **上游 (upstream) 分支**。远程仓库名和分支名由分支的上游配置 (`branch.<name>.remote` 和 `branch.<name>.merge`) 决定,允许远程分支名与本地不同(但通常设置相同)。 * **`matching`** (旧版默认):将 **所有** 本地存在的、与远程仓库中同名分支匹配的分支都推送上去(**慎用,可能导致意外推送大量分支**)。 * **`nothing`**:禁用无参数 `git push`,必须显式指定参数。 **总结关键区别**:`simple`/`upstream`/`current` 仅推送 **当前分支**;`matching` 推送 **多个分支**。 2. **设置上游分支 (`-u`)**: 第一次将本地分支推送到远程并建立跟踪关系时,**必须**使用 `-u` (或 `--set-upstream`) 选项: ```bash git push -u origin <本地分支名> # 推送到远程同名分支并设置上游 ``` 执行此命令后,Git 会: * 在远程 `origin` 上创建同名分支(如果不存在)。 * 设置本地分支的上游 (`branch.<本地分支名>.remote = origin`, `branch.<本地分支名>.merge = refs/heads/<远程分支名>`)。 **设置好上游后**,后续在同一分支工作,只需执行 `git push`(无参数),Git 就会根据 `push.default` 配置(通常是 `simple`)将当前分支推送到其上游分支。 3. **强制推送 (`--force` 或 `--force-with-lease`)**: * `git push --force`:无参数时,行为同样由 `push.default` 决定(通常是推送 **当前分支**),但会强制覆盖远程分支历史。**强制推送需谨慎,会覆盖他人提交**。 * `git push --force-with-lease`:更安全的强制推送,仅在远程分支没有您不知道的新提交时才覆盖。 4. **“无分支”情景的澄清**: 您提到的“没有分支的情况”不太可能。所有 Git 操作都在**工作树**或**分支**(包括匿名 `detached HEAD` 状态,本质也是一个指向 commit 的指针)中进行。`git push` 需要指定一个提交记录或分支引用(显式或隐式)。核心是理解 **`git push` 无参数时推送的对象是“当前分支”**。 **实战操作流程 (最常见场景):** 1. 初始化仓库并连接到远程: ```bash git init git remote add origin <远程仓库URL> ``` 2. 创建并切换到新分支 `feature`: ```bash git checkout -b feature ``` 3. 做一些更改并提交: ```bash git add . git commit -m "Initial commit on feature branch" ``` 4. **关键步骤:首次推送并设置上游 (使用 `-u`)**: ```bash git push -u origin feature # 推送本地 feature 到远程 origin 的 feature 分支,并设置上游跟踪 ``` 5. 后续在 `feature` 分支工作并需要推送新提交时,**无需指定分支名和远程名**: ```bash git push # 自动将当前分支 (feature) 推送到其上游分支 (origin/feature) ``` 6. 如果需要强制覆盖远程分支(**仅在必要时且确认安全后使用**): ```bash git push --force # 或更好的 git push --force-with-lease ``` **相关配置检查:** * 查看 `push.default` 设置: ```bash git config push.default ``` * 查看当前分支的上游设置: ```bash git branch -vv # 显示每个分支的上游跟踪信息 ``` 📌 **核心结论:** 当省略分支名执行 `git push` 时,Git **总是**推送**当前所在的分支**。推送的目标(远程仓库和远程分支名)则由该分支的上游配置 (`branch.<name>.remote/.merge`) 和 `push.default` 配置共同决定。正确设置上游(用 `git push -u`)后,`git push` 是推送当前分支最高效的方式[^1][^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值