【问题标题】:Why does my local branch show (local out of date) despite doing git fetch?尽管执行了 git fetch,为什么我的本地分支仍显示(本地已过期)?
【发布时间】:2020-02-02 22:02:21
【问题描述】:

我的队友在我处理feature2 时远程更新了他的分支feature1

现在当我执行$ git remote show origin 时,它会显示 -

Local refs configured for 'git push':

feature1 pushes to feature1 (local out of date)

我目前在分支feature2 上签出,我尝试了以下所有命令,但feature1 的状态没有更改为(up to date)。 (所有命令执行没有任何错误)

$ git fetch origin

$ git fetch --all

$ git fetch origin feature2

为什么会这样?我错过了什么?

【问题讨论】:

  • 你必须拉。 Fecthing 只是完成了一半:它获取新的 refs 但不更新任何本地分支。

标签: git git-pull git-fetch


【解决方案1】:

git fetch 只需从另一个存储库下载对象和引用。要将更改添加到您的分支中,您必须执行 git merge

要一步完成这两件事,您可以使用git pull

在你的情况下:

git merge origin/feature2

【讨论】:

    【解决方案2】:

    在使用 git fetch 从其他 Git 获取新提交后,您必须选择如何将这些新提交与您自己现有的任何提交结合起来。

    有两种主要的方式来组合提交:

    • git merge
    • git rebase

    在某些情况下,这些是非常不同的操作。在其他情况下——特别是您现有的所有提交一开始就来自其他 Git,并且您从未进行任何自己的提交,并且管理其他 Git 的人的行为举止的情况好吧——它们做的事情完全相同,所以你做哪一个都没有关系(除非第二个命令失败;见下文)。

    我自己的流程一般是:运行git fetch,检查发生了什么,然后选择我想做的git mergegit rebase中的哪一个,如果我还想做的话。然后,我根据这次检查的结果执行我想做的第二个命令,或者我完全根据这次检查的结果推迟。

    如果您确定要使用第二个命令,您可以使用git pull,它运行git fetch,然后运行另外两个 Git 命令之一。在查看git fetch 带来什么之前,您可以提前选择哪个 运行其他Git 命令。默认的第二个命令是git merge,所以如果您事先绝对确定您想要git fetch,然后是git merge,您可以运行git pull。如果您事先完全确定要运行 git rebase 秒,则可以运行 git pull --rebase

    请注意,git mergegit rebase 都可能失败,并给您留下一团糟需要清理的东西。如果您运行 git pull 并且它的第二个命令失败,那么您仍然处于您选择运行 git pull 的第二个命令的中间。你仍然需要清理混乱。您可以等到这种情况真正发生后才能了解 如何 清理它,但请记住,清理它的 方式 取决于 which 第二个命令你选择了!我喜欢避免使用git pull,以便通过 I 输入的事实知道我使用了第二个命令。:-)

    【讨论】:

    • 我自己的流程一般是:运行 git fetch,检查发生了什么 运行 fetch 命令后究竟如何检查 fetch 结果?我的意思是,你使用哪个命令?
    • 主要是git log,在我关心的远程跟踪名称上(例如,origin/master)。您也可以阅读git fetch 的输出,但它不是很友好。 git log master..origin/master 告诉我 origin/master 上现在可用的内容,我可以重新设置或合并。
    猜你喜欢
    • 2019-09-18
    • 2019-10-30
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2018-05-01
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多