git pull 是否在当前分支上运行?

2024-01-12

这是正确的吗git pull在分支机构运营?

在存储库中,运行时git pull在不同的分支上,它会做不同的事情吗?

当之后不指定任何参数时git pull,

  • 它是否只从远程的同名分支拉到当前分支origin?
  • 它对其他分支有什么作用吗?

Thanks.


First, 不要使用git pull。这个命令是never需要的,如果你避免使用它,直到你成为 Git 大师,你会过得更好。但如果你坚持使用它,因为它很方便——而且is方便——记住它只是运行git fetch首先,然后,根据各种情况,通常会运行git merge second.

这是正确的吗git pull在分支机构运营?

是的——但最好想想git pull作为跑步twoGit 命令,因为这就是git pull does.

在存储库中,运行时git pull在不同的分支上,它会做不同的事情吗?

目前尚不清楚“在不同的分支上”和“做不同的事情”是什么意思。你可能的意思是:

git checkout branch1; git pull; git checkout branch2; git pull

or:

git checkout branch1; git pull origin branch2 branch3

后者是very不同的。 (“何时使用此表格”的简短答案是never。长的答案是“还没有:首先了解 octopus 合并,然后重新阅读文档。然后,一旦您成为 Git 大师,您就会意识到您可能永远不应该直接使用 octopus 合并git pull无论如何,但至少现在你知道什么时候可以安全使用git pull完全没有。”)

前者——跑步git pull开启时branch1,然后运行git pull再次开启时branch2—只需执行下面列出的四个步骤两次,一次即可branch1,然后再次branch2.

当之后不指定任何参数时git pull,

  • 它是否只从远程的同名分支拉到当前分支origin?
  • 它对其他分支有什么作用吗?

让我们先处理第二部分,因为这很简单:“不,只要你不谈论远程跟踪分支."

接下来,我们需要注意一个假设:远程名称为origin。你可以拥有多个遥控器,如果你这样做,显然最多其中一个被命名origin。即使您只有一个遥控器,您也可以随意命名它。所以遥控器的想法是origin一开始有点不稳定。

(不过,通常情况下,它is origin。大多数人只有一个遥控器,它的名字是origin,所以只有the遥控器,而不是“可供选择的七个不同遥控器之一”或其他什么。)

当你跑步时git pull如果没有参数,Git 将:

  1. 识别当前分支upstream。例如,上游branch1可能是origin/branch1。请注意,该上游有两个部分:

    • 遥控器的名称,例如origin.
    • 分行名称在遥控器上找到, 例如branch1.


    做一个远程跟踪分支,Git 有效地将这两部分粘贴在一起,这就是为什么我们将其视为origin/branch1。但仍然有两个部分。

    不要求上游分支名称match当地分支机构名称。这只是一个好主意.

    (有时,当您有两个或更多遥控器时,您必须违反这个“好主意”。例如,假设该遥控器fred有一个名为develop和不同的遥控器susan有一个名为develop。你现在两者都拥有fred/develop and susan/develop in your存储库。你想对这两者做点什么;您将使用什么分支名称?也许你可以打电话给一个fred-develop和另一个susan-develop。但现在上游名称不再与本地名称匹配:上游为fred-develop is fred/develop, not fred/fred-develop.)

  2. 将此上游分为两部分:远程部分和分支名称正如在遥控器上看到的.

  3. Run git fetch有几个论点。这git fetch步骤将使用远程 URL 调用另一个 Git。一旦您的 Git 在网络电话上拥有了外部 Git,您的 Git 将获得它们所拥有的任何新提交their分支,你还没有任何地方。

    假设当前分支是branch1上游是origin/branch1。如果你自己的 Git 不是太旧(至少是 1.8.4 版本),这会更新你的origin/branch1。 (如果你的 Git 比这个旧,那么参数git pull提供防止您的远程跟踪分支被更新。这不是一个好的情况,你应该更新你的 Git 版本。这一切works,这很难解释。如果你避免git pull完全地,Git 1.8.3 及更早版本的奇怪方式不再重要,因为git fetch origin更新all你的远程跟踪分支,即使是在这些古老版本的 Git 中。)

    现在git fetch有那些新的提交your存储库,在你的origin/branch1 远程跟踪分支,一切就绪。后来的一个git fetch很快就会完成,因为你现在have那些新的提交。

  4. Run git merge, 或其他一些 Git 命令,有几个参数。

这是最后一步——通常git merge——这会影响your分支。什么时候git merge成功了,经常进行新的提交。与所有普通的 Git 命令一样,创建一个new commit 将提交添加到当前分支。 When git merge进行快进而不是进行新的提交,also影响您当前的分支。

因此,我们可以这样说:When git pull runs git merge, the git merge步骤影响您当前的分支的方式与git merge always影响您当前的分支。

You can ask git pull to run a different second command, though. Specifically, you can set things up so that git pull runs git rebase instead of git merge. To figure out what that does, we must look at what git rebase does, and that's more complicated—but in the end, it also affects your current branch, just like git merge.1 Hence we can also say: When git pull runs git rebase, the git rebase step affects your current branch in the same way that git rebase always1 affects your current branch.

把这一切放在一起

当我们把所有这些事实放在一起时,我们最终会看到git pull's second命令影响当前分支。并且,它only影响当前分支,因为git merge and git rebase work only在当前分支上。

(The first命令——git fetch步骤—影响远程跟踪分支。但由于这些只是 Git 记住从外部 Git 获取内容的方式,因此上次从外部 Git 获取内容的时间并不重要。)

Last, 不要使用git pull. Use git fetch,后跟您根据 中的内容选择的命令fetch: git merge or git rebase.


1There is a way to make git rebase affect a different branch, but—fortunately—git pull doesn't use it. (You probably shouldn't either, unless you know what you are doing. It is pretty trivial: it literally just does a git checkout of another branch-name first, then proceeds as if you had done this yourself, and had not specified the extra branch-name.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git pull 是否在当前分支上运行? 的相关文章

  • 获取最新远程提交的 SHA1 [重复]

    这个问题在这里已经有答案了 可能的重复 git bash 如何检查是否有新的提交可用 https stackoverflow com questions 6006759 git bash how to check if theres a n
  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • Git:压缩 master 上提交的最简单方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 git 将最后 X 次提交压缩在一起 https stackoverflow com questions 5189560 how can i squash my last x commits
  • 我在哪里? *(无分支)

    我已经熟悉了创建 合并和删除分支 我想知道我在哪里 这样我就不会将工作提交到错误的分支 我用git branch a看看我有哪些分支 我认为星号 显示我当前所在的分支 当我得到以下信息时 这意味着什么 no branch master or
  • GIT - 推送到 (GitHub) origin master 没有任何作用

    我已经分叉了某人的 GIT 存储库 https github com nippysaurus toodledo objc 将其克隆到我的本地计算机 显示带有以下信息的来源 remote origin Fetch URL https emai
  • 如何签出仅在“git ls-remote”中列出的分支?

    我遇到了无法切换到仅列出的分支的情况git ls remote 这是详细信息 我分叉了一个 github repoA 作为 repoB 创建了自己的分支并将其推送到 ComputerA 中的 repoB 在 ComputerB 中 我将分叉
  • 自动同步两个 git 存储库

    是否可以保持同步两个 Github 存储库 远程 的特定文件夹 有两个 github 存储库 repoA 和 repoB 这两个存储库都有名为 ABC 的文件夹以及其他独特的文件夹 如果repoA的文件夹ABC中的任何文件有更新 我想自动更
  • 清理远程 Git 分支

    我已经将 SVN 存储库移至 Git 可能由于多次克隆 我现在只剩下一堆看起来像这样的分支 BranchA origin BranchA remotes BranchA remotes origin BranchA remotes orig
  • 为什么 git-svn 应该积极搜索旧历史?

    当我运行 git svn clone s 时发生了一些奇怪的事情 尽管以下信息告诉我们不要惊慌 但我想知道为什么会出现这种 svn 错误 为什么这个路径不存在 是被别人删除了吗 如果是 为什么 git svn 应该积极搜索旧历史记录 Ini
  • 在 Windows 上使用 Git - 意外丢失了大量工作。我可以拿回来吗?

    我很困惑 我想我已经失去了几个小时的工作时间 我之前在 Git 中编辑了一个文件 我保存了它 但没有提交 我确实做了一些其他文件更改 并提交并推送了它们 然而 有一个文件被搞乱了 所以我单击了最后一次成功的提交 然后按了 回滚到此提交 令我
  • 使用 TFS REST API 获取 Git 提交的最新关联工作项

    我正在尝试获取关联的工作项使用 TFS REST API 进行 GIT 提交 https www visualstudio com en us docs integrate api git commits 我的请求 URL 如下所示 htt
  • http.h:6:23: 致命错误:curl/curl.h:没有该文件/目录

    我在 CentOS 7 中下载 git 包 wget https www kernel org pub software scm git git 2 0 1 tar gz tar xzf git 2 0 1 tar gz 当我编译git时
  • 如何停用 Xcode git 功能? (删除 git 集成)

    我的 Xcode 项目位于 git 上 但我不喜欢 Xcode git 集成 有时 我有来自 Xcode 的错误 https stackoverflow com questions 7388560 error fatal not a git
  • 如何获取 git 存储库中所有文件的计数?

    如何获取 git 存储库中当前所有文件的计数 您可以使用以下命令获取 git 存储库中所有跟踪文件的计数 git ls files wc l 命令分解 The git ls files命令本身打印出存储库中所有跟踪文件的列表 每行一个 Th
  • Heroku 应用程序上的 Nodejs Express EACCES 0.0.0.0:80

    我正在尝试在他们的网站上新创建的 Heroku 应用程序上运行 Node 应用程序 我按照他们的步骤操作 但在显示应用程序状态时仍然遇到错误 我跟着Node js 入门 https devcenter heroku com articles
  • GitPython 检查 git pull 是否更改了本地文件

    使用 GitPython 我只想在拉取后本地文件发生更改时才调用函数 例如 如果我在一台单独的计算机上进行推送 然后拉第一台计算机 它按预期工作 但不提供任何输出 理想的输出是已更改的文件列表 或者只是告诉我拉动是否有错误 没有拉动 因为分
  • 结帐时出现 Git 错误:“致命:引用不是树”

    当我决定弄清楚为什么我正在从事的项目如此重要时 这一切就开始了 我运行了以下脚本 git rev list objects all git cat file batch check objecttype objectname objects
  • 如何在现有裸存储库中创建引用日志信息

    您可能已经知道 默认情况下 git 不会为新的裸存储库启用引用日志更新 问题是 我有一个很长的历史存储库 但它是在我设置 logAllRefUpdates 标志之前创建的 现在我希望其他应用程序可以使用该信息 如何通过对现有存储库进行最少的
  • git merge --squash 和 gitcherry-pick 有什么区别?

    如果我在标准的主功能工作流程中工作 那么将功能分支压缩到主功能分支和将其挑选到主功能分支之间有什么区别 分支示例 m1 m2 master f1 f2 feature 我认为两者都有相同的输出 即 m1 m2 m3 master f1 f2
  • 如何使用 git 找到一个分支中但不在另一个分支中的所有提交?

    我有两个分行master and live Master是发展 分支并包含尚未准备好进入的提交live 如果在master需要进入的分支live树枝然后他们被樱桃采摘master to live 有时会做出承诺live分支然后是 樱桃摘入m

随机推荐