无需显式输入即可从当前原点拉取

Pull from current origin without explicit typing

有没有直接从当前分支拉取而无需显式调用的快捷方式。

例如我检查了一个分支:git checkout mybranch

从我使用的分支中提取 git pull origin mybranch。是否可以跳过 origin mybranch 部分?问题是,我们的分支机构的名称很长,例如 b_searchsystem_grid

可能类似于 git pull origin .(对于当前分支)。

你可以只做 git pull 并且如果你做了 git push -u origin <branch> 就让它暗示原点,一旦它通过设置你的上游远程使所有未来的 git 拉取基于原点。

我认为重要的是不仅要记住命令,还要理解背后的原因。

Git 分支可以有一个 "upstream branch" 集,这是与远程本地分支对应的分支。必须显式声明此上游分支,因为您可能有多个遥控器。在那种情况下,git 将不知道在您执行 git pushgit pull.

时从哪里推或拉到哪里

您可以列出您分支的上游分支:

$ git branch -vv
* testbranch           271404b commit message
  master               ac7a302 [origin/master] add foo

在这里你看到 testbranch 分支没有上游分支,所以 git 不知道从哪里 push/pull。然而,master 分支确实有一个上游分支(origin/master),所以当我们输入 git pull.

时 git 确实知道该做什么

我们可以通过以下几种方式设置上游分支:

  • git branch --set-upstream-to origin/branchname
  • git branch -u origin/branchname(只是一个shorthand)
  • git push -u origin branchname(通常更方便)

TL;DR

建立正确的默认值后,您可以 运行 仅 git pull 不带任何参数,但我建议您将其拆分为 git fetch && git merge,如果这是您想要的。

首先,请记住 git pull 仅表示:运行 git fetch,然后 运行 第二个 Git 命令。第二个命令默认为git merge,但您可以选择git rebase

git fetch命令需要知道两件事:

  • 从哪里获取?

    重要的是,有一个默认值。默认是与当前分支关联的 remote,基于它的 upstream。这两个定义如下。

  • 取什么?

    这里也有默认值。没有参数的 运行ning git fetch 表示 "fetch everything",这正是您通常想要的。当 git pull 运行s git fetch 时,它添加了一些参数来限制获取的内容,这可能会使 this 获取的速度稍快,但会使以后的获取过程中稍微慢一点。 (现在付款,或稍后付款,但由于付款通常只是几分之一秒,谁在乎呢?)

git mergegit rebase命令至少需要知道一件事:

  • 我们应该合并或重新定位什么?

这里也有一个默认值。默认是上游。当你使用 git pull 到 运行 第二个 Git 命令时,它有点摆弄这个,但效果基本相同,这样你就可以 运行 这两个 Git命令自己。

遥控器

任何 Git 存储库都可以有任意数量的 Git 调用的 remotes。远程主要是 URL 的简称,它的作用类似于 phone 号码,可以通过该号码访问其他 Git 存储库。最常见的远程名称是 origin.

当您 运行 git clone 对其他 Git 存储库进行初始克隆时,您告诉 git clone 如何到达另一个 Git,给它一个URL。 clone 步骤 保存 URL 在名称 origin 下。1 因此 origin成为提及其他 Git.

的简单方法

每个分支可以有一个 upstream

分支的上游由两部分组成:

  • 遥控器的名称,以及
  • 另一个分支的名称 Git。

通常我们只是把这两个放在一起,所以分支 B 的上游是 origin/<em>B</em>请注意,从远程跟踪名称创建本地分支会自动设置上游,因此您很少需要这样做。2

要设置或更改任何给定分支的上游,您可以使用以下几个命令中的任何一个:

  • git branch --set-upstream-to origin/<em>branch</em> <em>branch</em>(这将branch的上游设置为origin/<em>branch</em>)

  • git branch --set-upstream-to origin/<em>branch</em>(这设置current 分支的上游,无论你签出什么,到 origin/<em>branch</em>)

    如果您还没有创建分支,这通常是您应该使用的那个。通常您会在分支上,并且是时候设置它的上游了, 所以你现在可以设置它了。

  • git push -u origin <em>branch</em>

    如果你刚刚创建了分支,这就是你应该使用的。如果你刚刚创建了分支,那么就没有origin/<em>分支</em>,你必须先创建名字branch在另一个 Git 中,您使用 git push 来完成。现在它已经存在,并且你也有 origin/<em>branch</em>now 你可以设置上游。使用 git push -u 可以同时完成这两项操作,作为一种捷径,它的副作用是让 git push 知道你 的意思是 创建在另一个 Git 中分支,因此它也跳过了一堆烦人的错误消息。


1你可以选择另一个名字,但很少有人这样做。

2考虑以下序列:

git clone <url>        # creates repository, adds the remote, fetches,
                       # and checks out master based on origin/master

cd <repository>        # enter repo so that you can work in it

git checkout develop   # creates develop based on origin/develop

git clone 步骤由 运行ning 创建了您的 master 分支,实际上是 git checkout master。这使得 master 有了一个上游,即 origin/mastergit checkout develop 步骤做同样的事情:找到 origin/develop,用它来创建 new 分支名称 develop 作为 your develop,并将您的 develop 设置为将 origin/develop 作为其上游。

git pull origin $(git rev-parse --abbrev-ref HEAD)

对于 git 2.22+:

git pull origin $(git branch --show-current)