"git fetch && git checkout" 与仅 "git checkout" 之间有什么区别?

What's the difference among "git fetch && git checkout" versus "git checkout" only?

我们应该总是这样做吗:

git fetch && git checkout

或者仅

git checkout

?

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

git fetch && git checkout develop

但是如果

为什么这是必要的

git checkout

也会这样做,不是吗?

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

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

git fetch 将从您的远程位置提取所有更改

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

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

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

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

在这里插话,因为我必须每天为多个项目和多个分支使用 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

现在您已经签出开发分支,拉下所有最新的更改和远程分支,并从该开发分支创建了一个功能分支。

希望这对您有所帮助。

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

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

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

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

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

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

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

为了使用最少的行话进行简单的解释,如果您想在本地工作一个名为 devA 的分支,则 3 个步骤是:

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

例如,如果您只是尝试转到第 2 步而不先执行全部提取,那么它很可能会 return 一个错误,指出该分支实际上并不存在。或者切换到它的过时版本并错误地告知您您是最新的在线存储库,而实际上您不是。因此欺骗你认为你不需要做第 3 步

第 2 步:git checkout devA 这只是切换你的 git 在那个分支上工作。简单。

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

考虑到所有这些,回到最初的问题

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

git checkout = 懒得去查仓库的状态,试着切换到一个分支。这可能会告诉您该分支不存在。或者它可能会切换到分支的过时版本,同时错误地告诉您它与存储库是最新的。