当前位置:   article > 正文

使用 git 先提交后拉取的时候远程分支不允许问题_hint: git config pull.rebase false # merge hint: g

hint: git config pull.rebase false # merge hint: git config pull.rebase true

问题场景

修改本地代码使用 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.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

问题解释

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

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

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

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

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

    arduinoCopy code
    git config pull.ff only
    
    • 1
    • 2

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

请记住,您可以使用 --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
  • 1
  • 2

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

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

git config --get-regexp pull
  • 1

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

git config pull 设置成合并策略

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

# 单个配置
git config pull.rebase false

# 全局配置
git config --global pull.rebase false
  • 1
  • 2
  • 3
  • 4
  • 5

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/621441
推荐阅读
相关标签
  

闽ICP备14008679号