“ git fetch && git checkout”和“ git checkout”之间有什么区别?

mar*_*uiz 7 git git-fetch git-checkout

我们应该总是这样做:

git fetch && git checkout
Run Code Online (Sandbox Code Playgroud)

或仅

git checkout
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

git fetch && git checkout develop
Run Code Online (Sandbox Code Playgroud)

但是,如果有必要,为什么这是必要的

git checkout

会做同样的事,不是吗?

tal*_*mir 6

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

为了用最少的术语进行简单的解释,如果您想在本地工作的分支称为devA3 个步骤是:

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

例如,如果您只是尝试进入步骤 2,而不首先执行 fetch all,那么它很可能会返回一个错误,表明该分支实际上并不存在。或者切换到它的过时版本,并错误地通知您您已使用在线存储库,但实际上并非如此。从而欺骗您认为不需要执行步骤 3

第 2 步:git checkout devA 这只是将你的 git 切换到该分支上工作。简单的。

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

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

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

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


小智 5

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

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


isa*_*ers 5

由于我必须每天在多个项目和多个分支中使用Bitbucket,因此在这里很高兴,我将为您提供建议。

如果您从Bitbucket签出(即创建分支),则可以使用示例中粘贴的命令提供的命令。但是,由于在初始结帐后您很可能会切换分支,创建分支并且您的本地将不同步,因此我建议您使用终端进行以下操作。:

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

是的,这似乎是重复的工作,但是与Bitbucket一起使用,我会说这是确保您所使用的分支机构拥有最新信息的最安全,最明智的方法。

话虽这么说,你总是应该在创建分支,从不直接推送到developmaster分支机构。

因此,假设您在develop分支机构上,并通过签出分支机构完成了上述操作,并获取并提取了最新的分支,然后使用standard在该主分支上创建了一个分支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

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

希望这可以帮助。


jav*_*eda 5

git fetch 将引用拉到在BItbucket上创建的远程分支的引用。

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

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

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

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

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