当前位置: 首页 > news >正文

使用 git 先提交后拉取的时候远程分支不允许问题

问题场景

修改本地代码使用 git 先提交后拉取的时候远程分支不允许的问题

image-20240319143627806

  1. 修改本地代码时,远程分支存在其他新提交
  2. 先执行了 git commit -m 'xxx update'
  3. 然后再执行 git pull 拉取远程分支代码,出现如下提示
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.

问题解释

出现这种问题表明您的存储库中存在分歧的分支,这意味着不同的分支对同一份代码进行了不同的更改,Git 在尝试拉取更改时不知道如何协调它们。

为了协调这些分歧的分支,您需要在继续拉取操作之前选择提示消息中提供的选项之一。以下是各个选项及其含义:

  1. 合并(Merge):此选项将不同分支的更改合并到当前分支的新提交中。您可以通过运行以下命令启用此选项:

    arduinoCopy code
    git config pull.rebase false
    
  2. 变基(Rebase):此选项将一个分支的更改应用到另一个分支之上。它实际上是将分歧的提交移到当前分支的顶端。您可以通过运行以下命令启用此选项:

    arduinoCopy code
    git config pull.rebase true
    
  3. 仅快进(Fast-forward only):此选项允许 Git 仅在可能的情况下执行快进合并。如果由于分歧的分支而无法执行快进合并,则 Git 将不会自动合并更改,并需要手动干预。您可以通过运行以下命令启用此选项:

    arduinoCopy code
    git config pull.ff only
    

选择最适合您工作流程和项目要求的选项。一旦您做出选择,就可以像往常一样继续进行拉取操作。

请记住,您可以使用 --global 标志以及 git config 来为所有存储库设置默认偏好,或者您可以通过在命令行中传递 --rebase--no-rebase--ff-only 来覆盖已配置的默认设置。

rebase false true区别

git config pull.rebase falsegit config pull.rebase true 是用来配置 Git 在执行 git pull 命令时如何处理分支合并的方式,具体区别如下:

  1. git config pull.rebase false
    • 当您设置此选项时,Git 会使用合并(merge)策略来整合远程分支的变更到您的本地分支。
    • 这意味着,执行 git pull 后,Git 会尝试将远程分支的更改合并到您当前的分支上,并且可能会生成一个新的合并提交,以整合两个分支的更改。
  2. git config pull.rebase true
    • 当您设置此选项时,Git 会使用变基(rebase)策略来整合远程分支的变更到您的本地分支。
    • 这意味着,执行 git pull 后,Git 会尝试将您当前分支的提交应用到远程分支的最新提交之后,从而使您的提交历史线条更为线性。
    • 使用变基策略通常会产生一个更为整洁的提交历史,因为它不会生成额外的合并提交。

综上所述,git config pull.rebase false 将使用合并策略,而 git config pull.rebase true 将使用变基策略。您可以根据您的项目需求和个人偏好来选择合适的方式。

pull.ff only 作用和场景

git config pull.ff only 是用来配置 Git 在执行 git pull 命令时限制合并方式的选项。它的作用和适用场景如下:

作用:

  • 限制了 git pull 命令只能执行快进合并(fast-forward merge)。
  • 如果远程分支的最新提交是当前分支的祖先,那么执行 git pull 时会自动进行快进合并,从而保持提交历史的线性。

适用场景:

  • 当您确定在执行 git pull 时不希望生成额外的合并提交时,可以使用此选项。
  • 在确保在远程分支的变更不会导致冲突的情况下,可以启用此选项来保持提交历史的整洁和线性。

总的来说,git config pull.ff only 适用于那些希望保持提交历史线性,并且愿意放弃使用合并策略的场景,通常在团队中遵循一致的提交历史规范时会使用此选项。

查看 git config pull 配置

要查看 Git 配置中 pull 相关的设置,您可以使用以下命令:

git config --get pull.rebase
git config --global --get pull.rebase

这将显示 pull.rebase 的当前配置。如果该配置未设置,则不会有输出。

如果您想要查看所有与 pull 相关的配置,可以使用以下命令:

git config --get-regexp pull

这将列出所有以 pull 开头的配置项及其对应的值。

git config pull 设置成合并策略

要将 Git 的 pull 设置成合并策略,您可以执行以下命令:

# 单个配置
git config pull.rebase false# 全局配置
git config --global pull.rebase false

这将配置 Git 使用合并策略而非变基策略。这意味着在执行 git pull 命令时,Git 将会采用合并方式将远程分支的变更合并到本地分支。

http://www.lryc.cn/news/321474.html

相关文章:

  • Unity 创建快捷方式开机自动启动
  • 什么是docker(docker客户端、镜像、容器、仓库)
  • [Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型
  • Android Framework开发之Linux +Vim命令
  • MySQL 索引的10 个核心要点
  • MaixSense-A010 接入 ROS
  • 使用WordPress在US Domain Center上建立招聘网站的详细教程
  • C++:类和对象(上篇)
  • 氧化铝电容的工艺结构原理及选型参数总结
  • 野火ESP8266模块开发-基于Arduino IDE
  • [Qt学习笔记]Qt实现自定义控件SwitchButton开关按钮
  • 【工具】mac 环境配置
  • 【前端寻宝之路】学习和总结HTML的标签属性
  • kafka2.x版本配置SSL进行加密和身份验证
  • Linux和Windows下的文件批量重命名
  • stm32之GPIO电路介绍
  • Unity Toggle处理状态变化事件
  • UE5.1 iClone8 正确导入角色骨骼与动作
  • FFmpeg-- c++实现:pcm和yuv编码
  • 图解CodeWhisperer的安装使用
  • Python内置对象
  • 开源数据集 nuScenes 之 3D Occupancy Prediction
  • 物联网竞赛板CubMx全部功能简洁配置汇总
  • 使用Redis做缓存的小案例
  • 剧本杀小程序功能介绍
  • C#基础语法学习笔记(传智播客学习)
  • 图论01-DFS和BFS(深搜和广搜邻接矩阵和邻接表/Java)
  • 【Python】Miniconda+Vscode+Jupyter 环境搭建
  • Redis消息队列与thinkphp/queue操作
  • 【Ubuntu】常用命令