【问题标题】:What's the difference among "git fetch && git checkout" versus "git checkout" only?“git fetch && git checkout”与“git checkout”有什么区别?
【发布时间】:2018-11-23 10:34:12
【问题描述】:

我们是否应该一直这样做:

git fetch && git checkout

或者只有,

git checkout

?

例如,当从 bitbucket 中的分支进行结帐时,它们提供的命令如下:

git fetch && git checkout develop

但是如果

git 结帐

也会这样做,不是吗?

【问题讨论】:

    标签: git git-checkout git-fetch


    【解决方案1】:

    问题有问题。因为它缺少一个步骤。 您实际上需要 3 个步骤来正确切换您的工作分支。 如果您只执行 OP 中描述的 2 个步骤,那么您会感到很痛苦。

    为了用最少的行话做一个简单的解释,如果你想在一个名为 devA 的分支上本地工作,三个步骤是:

    第一步:git fetch --all 尽管从技术上讲,您可以只获取这一分支。养成总是做 fetch --all 的习惯是个好主意 该命令使 git 找出在线存储库的实际状态。它通常应该在任何操作之前完成,许多人运行的脚本每分钟都会自动执行此操作。

    例如,如果您只是尝试转到第 2 步而不首先执行 fetch all,那么它很可能会返回一个错误,即该分支实际上并不存在。或者切换到它的过时版本,并错误地告诉您您是最新的在线存储库,而实际上您不是。从而欺骗您认为您不需要执行第 3 步

    第二步:git checkout devA 这只是将您的 git 切换到在该分支上工作。很简单。

    第 3 步:git pull 这实际上会更新您当前工作的分支(参见步骤 2)以匹配在线存储库。如果你不这样做,那么下次你尝试提交更改时,你会不小心破坏东西。 虽然如果这是你第一次在当前机器上签出一个分支,你不需要使用这个命令。

    考虑到所有这些,回到原来的问题

    git fetch && git checkout = 首先找出存储库的状态。然后切换到一个分支。

    git checkout = 不用费心去了解存储库的状态,尝试切换到分支。这可以告诉您该分支不存在。或者它可能会切换到一个过时版本的分支,同时错误地告诉您它与存储库是最新的。

    【讨论】:

      【解决方案2】:

      git fetch 拉取对正在(在本例中)BItbucket 上创建的远程分支的引用。

      git checkout 将您的当前目录移动到特定分支或特定提交(取决于参数)。

      这里发生了什么?当您在 bitbucket 上创建分支时,它们会为您提供该命令,因为: 1- 分支是在远程存储库上创建的。您的存储库的本地副本还没有那个新分支。这就是 git fetch 命令的用途。 2- Bitbucket 假设,由于您刚刚创建了该新分支,您将立即处理它,并且您需要将其告知您的本地存储库。这就是git checkout 命令的用途

      这不是实现它的唯一方法。例如,您可以使用以下命令避免 git fetch 命令:

      git checkout -b {new_branch_name} && git pull origin {new_branch_name}

      这不是最实用的方法,但可能会让您更好地了解这些命令的工作原理。

      【讨论】:

        【解决方案3】:

        由于我必须每天在多个项目和多个分支中使用 Bitbucket,因此在这里插话,我会给你我的建议。

        如果您从 Bitbucket 结帐,即创建一个分支,那么您应该可以使用他们在您的示例中粘贴时提供的命令。但是,由于很可能在初始结帐后您将切换分支,创建分支和您的本地将不同步,我建议使用您的终端进行以下操作。 :

        1. git checkout develop 或您需要的任何分支
        2. git fetch && git pull 即获取所有分支和最新更改,并从您所在的分支中提取所有更改。

        是的,这看起来确实是重复的工作,但使用 Bitbucket 我会说这是确保您从正在处理的分支获得最新的最安全和最明智的方法。

        话虽如此,您应该始终创建分支,并且永远不要直接推送到您的 developmaster 分支。

        假设您在 develop 分支上,您已经通过检查分支完成了上述操作,并获取并提取了最新的分支,然后您将使用标准 git checkout -b my-feature-branch 从该主分支创建一个分支

        我们在我的商店所做的示例:

        1. git checkout develop
        2. git fetch && git pull
        3. git checkout -b feature/JIRA_ISSUE_NUMBER-update-layout-for-this-page

        现在您已经检查了开发分支,提取了所有最新的更改和远程分支,并从该开发分支创建了一个功能分支。

        希望这会有所帮助。

        【讨论】:

          【解决方案4】:

          具体到您的问题“当从 bitbucket 中的一个分支结帐时,他们提供的命令如下: git fetch && git checkout develop "。这是因为在云端或远程创建的开发分支在您的本地计算机上不可用,除非您从远程获取更新。

          因此,要切换或结帐到开发分支,您首先需要获取所有远程更新以了解开发分支的存在。一旦你做了一个 fetch,你的本地 repo 就会知道在远程创建的新分支;当您进行结帐以进行开发时,它将设置一个新的本地分支来跟踪其远程对手。

          【讨论】:

            【解决方案5】:

            git fetch 用遥控器更新origin/<branch_name>git checkout 可用于切换分支。两者都没有任何关联,除非您尝试切换到在远程新创建的分支并且它的本地版本在您的系统上不存在。

            但是,当您使用git pull(或git fetchgit rebase)然后git checkout -b <another_branch> 来创建一个新分支时,您要确保您的新分支是使用最新版本的 stable 进行分叉的代码。

            【讨论】:

              【解决方案6】:

              git fetch 将从您的远程位置下拉所有更改

              git checkout 会将您切换到不同的分支(或将您的文件恢复到以前的状态,具体取决于您的使用方式)

              使用 fetch 和 checkout 切换分支并拉取所有更新的文件。仅使用 checkout 来切换分支,但继续使用本地版本。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-04-08
                • 1970-01-01
                • 2022-11-10
                • 2011-12-20
                • 2020-03-05
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多