代码之家  ›  专栏  ›  技术社区  ›  Andrew

Git:获取分支上的最新提交

  •  6
  • Andrew  · 技术社区  · 15 年前

    我在努力理解关于Git的一些事情。

    我们有一个存储库,其中有许多分支。我可以从这些分支中提取一个本地副本(git checkout-b…),进行一些更改,然后将它们推回来。但是,如果我未能标记分支的结尾,那么其他用户如何获得分支的头部呢?当他们使用git checkout获取分支时,他们会在分支点(而不是分支的头部)获取代码。

    我这里缺什么?

    编辑:我很晚才进入这个项目,参与了cvs到git的转换。我假设foo_3_4_0001…用foo_3_4_0001_的首字母标记所有分支的标记点。我怎么检查?

    编辑2:感谢所有提供答案的人。结果发现标记foo_3_4_0001不在3.4分支上,这就是我一直缺少的。我已经安排了私刑派对。


    @Ghoseb没用。我试过这个:

    16:19:29 (1) foo $ git checkout --track -b FOO_3_4_0001_INITIAL origin/FOO_3_4_0001_INITIAL
    Branch FOO_3_4_0001_INITIAL set up to track remote branch refs/remotes/origin/FOO_3_4_0001_INITIAL.
    Switched to a new branch "FOO_3_4_0001_INITIAL"
    16:19:36 (1) foo $ git branch
    * FOO_3_4_0001_INITIAL
      master
    16:19:39 (1) foo $ git pull
    remote: Counting objects: 68, done.
    remote: Compressing objects: 100remote: % (59/59), done.
    remote: Total 61 (delta 18), reused 0 (delta 0)
    Unpacking objects: 100% (61/61), done.
    From ssh://***
       f0c5a5f..99f6c1e  master     -> origin/master
    Already up-to-date.
    16:19:42 (1) foo $
    

    在这一点上,我检查了我对这个分支所做的更改,但它不在那里。如果我检查了标记为foo_3_4_0001_rc5a的代码,我的零钱就在那里。


    好的,关于@dustin和@mipadi的更多信息。

    当我奔跑 git branch -r 我明白了:

    16:12:02 (1) foo $ git branch -r
      origin/FOO_3_3_0001_BUILT_VF_BRANCH
      origin/FOO_3_4_0001_INITIAL
      origin/FOO_3_5_0000_RC5
      origin/FOO_3_5_0001_BRANCH
      origin/HEAD
      origin/master
      origin/origin
    16:12:05 (1) foo $
    

    如果我看标签的列表,我会发现,除了其他事情:

    16:12:05 (1) foo $ git tag -l
    FOO_3_4_0000_RC1
    FOO_3_4_0000_RC2
    FOO_3_4_0000_RC2b
    FOO_3_4_0000_RC3
    FOO_3_4_0000_RC4
    FOO_3_4_0000_RC4b
    FOO_3_4_0000_RC5
    FOO_3_4_0000_RELEASE
    FOO_3_4_0000_TC1
    FOO_3_4_0000_TC2
    FOO_3_4_0001_RC2
    FOO_3_4_0001_RC3
    FOO_3_4_0001_RC4
    FOO_3_4_0001_RC5
    FOO_3_4_0001_RC5a
    FOO_3_4_0001_TC1
    16:14:33 (1) foo $
    

    我面临的挑战是知道foo_3_4_0001_初始分支的最新代码是什么。

    现在在这个例子中,我碰巧知道它是foo-3_4_0001_rc5a,但是如果我不知道(我们的一些开发人员有时会这样做),我该如何检查源代码foo-3_4_0001_初始分支知道我在该分支上有最新的代码?

    5 回复  |  直到 6 年前
        1
  •  4
  •   mipadi    15 年前

    声音 好像你做了正确的事。分支的名称只是指向分支上最新提交的指针。你确定你要参加吗? 是否将更改推回到每个人都从中提取的回购?当你承诺的时候,你只是承诺 你的 本地回购,因此要获得更改,协作必须(a)从本地回购中提取,或(b)从其他可访问的回购中提取,您已使用 git push .

        2
  •  8
  •   Baishampayan Ghose    15 年前

    他们只需从远程存储库中拉出,就可以得到远程分支的头。

    $ git remote update
    $ git checkout <branch_name>
    $ git pull origin <branch_name>
    $ <edit> ...
    $ git commit
    $ git push origin <branch_name>
    

    我假定远程存储库的名称是源站,您可以用实际名称替换它。

        3
  •  1
  •   andersjanmyr    15 年前

    Git Clone、Pull和Fetch正在处理整个存储库树。 分支只是本地存储库中的标记。

    完成克隆后,源站中会有远程存储库的副本。 您可以通过在本地签出来访问它。

    git co -b origin_local_master origin
    

    这将创建原始主控形状的本地可编辑分支。

    但是您也可以访问这个存储库中的分支。

    git co -b origin_local_dev origin/dev
    

    这将创建源分支dev的本地可编辑分支。

        4
  •  0
  •   Paul    15 年前

    只是为了确保我们不会忽视显而易见的:

    当您进行更改时,是否先提交它们,然后再将它们推回?Git分支指向最新的 犯罪 在分支上,所以如果没有提交更改,那么分支仍然会指向分支点,这就是您所说的正在发生的。

        5
  •  0
  •   Alexander Mills    6 年前

    如果您谈论的是本地分支而不是远程分支,那么这两项工作都可以为您提供最新的提交哈希:

    git rev-parse HEAD
    

    git log -n 1 --pretty=format:"%H"  
    

    两者都试一下,它们应该是等效的