从当前原点拉出而无需显式输入

时间:2018-01-14 19:33:09

标签: git git-bash

是否有快捷方式从当前分支拉出而没有明确调用它。

E.g。我检查了一个分支:git checkout mybranch

要从分支拉出,我使用git pull origin mybranch。可以跳过origin mybranch部分吗?问题是,我们的分支有很长的名字,如b_searchsystem_grid

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

3 个答案:

答案 0 :(得分:2)

我认为不仅要记住命令,而且要了解这背后的原因也很重要。

Git分支可以有一个"上游分支" set,它是遥控器上本地分支的相应分支。必须显式声明此上游分支,因为您可能有多个远程分支。在这种情况下,当您执行git pushgit pull时,git不会知道从哪里推或拉。

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

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

在这里你看到testbranch分支没有上游分支,所以git不知道从哪里推/拉。但是,主分支确实有一个上游分支(origin/master),因此当我们键入git pull时,git确实知道该怎么做。

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

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

答案 1 :(得分:2)

TL; DR

在您建立正确的默认值后,您可以只运行git pull而没有参数,但我建议您将其拆分为git fetch && git merge,如果这是您想要的。

首先,请记住git pull只是意味着:运行git fetch,然后运行第二个Git命令。第二个命令默认为git merge,但你可以请改为选择git rebase

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

  • 从哪里取?

    重要的是,有一个默认值。默认值是与当前分支关联的远程,基于其上游。这两个定义如下。

  • 取得什么?

    这里也有默认值。不带参数运行git fetch意味着"获取所有内容",这是您通常想要的。当git pull运行git fetch时,它会添加一些参数来限制获取的内容,这可能会使获取稍微快一些,但在此过程中使将来的提取稍微慢一些。 (立即付款,或稍后付款,但由于付款通常只是几分之一秒,谁在乎呢?)

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

  • 我们应该合并或改变什么?

这里也有违约。默认为上游。当你使用git pull来运行第二个Git命令时,它会稍微改变一下,但效果基本相同,这样你就可以自己运行两个Git命令了。

遥控器

任何Git存储库都可以有任意数量的Git调用远程。远程主要是URL的短名称,其作用类似于可以访问其他一些Git存储库的电话号码。最常见的远程名称是origin

当您运行git clone进行其他Git存储库的初始克隆时,您告诉git clone如何访问其他Git,并为其提供一个URL。 clone步骤保存名称为origin的。 1 因此origin成为提及其他Git的简单方法。

每个分支可以有一个上游

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

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

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

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

  • git branch --set-upstream-to origin/branch branch(这会将 branch 的上游设置为origin/branch

  • git branch --set-upstream-to origin/branch(这会将当前分支的上游设置为origin/branch

    }

    }

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

  • git push -u origin branch

    如果您刚创建了分支,则应该使用此功能。如果您刚刚创建了分支,那么根本没有origin/branch,您必须首先在其他Git中创建名称​​ branch ,与git push一起使用。现在它已存在,并且您还有origin/branch现在,您可以设置上游。使用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步骤通过运行master来创建git checkout master分支。这使master有一个上游,即origin/mastergit checkout develop步骤执行相同的操作:找到origin/develop,使用它将分支名称develop设为您的 {{ 1}},并将develop设置为develop作为其上游。

答案 2 :(得分:1)

你可以git pull进行git push -u origin <branch>,如果你通过设置你的上游遥控器,它将根据原点进行所有未来的git拉动,那么它就会产生JSONObject a = (JSONObject) parser.parse(inputLine); JSONArray resources = a.getJSONArray("resources");