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

时间:2009-01-19 04:46:09

标签: git branch

我很难理解有关GIT的事情。

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

我在这里缺少什么?

编辑:我很晚才进入这个项目并参与了CVS到GIT的转换。我假设FOO_3_4_0001 ...标记沿着分支的所有标记点用FOO_3_4_0001_INITIAL开始。我怎么检查?

编辑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_INITIAL分支上的最新代码是什么。

现在在这个例子中,我碰巧知道它是FOO_3_4_0001_RC5a,但如果我不知道(对于我们的一些开发人员有时会这样),我如何查看origin_FOO_3_4_0001_INITIAL分支知道我已经得到了那个分支上的最新代码?

5 个答案:

答案 0 :(得分:8)

他们只需从远程存储库中取出即可获得远程分支的HEAD。

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

我在这里假设远程存储库的名称为origin,您可以用实际名称替换它。

答案 1 :(得分:4)

听起来就像你正在做正确的事情一样。分支的名称只是指向分支上最新提交的指针。你确定你正在将推送回每个人都要拉的回购吗?当您提交时,您只是承诺您的本地仓库,因此要进行更改,协作必须(a)从您的本地仓库中提取,或者(b)从其他可访问的仓库中提取您已使用git push推送了更改。

答案 2 :(得分:1)

Git clone,pull和fetch正在使用整个存储库树。 分支只是本地存储库中的标记。

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

git co -b origin_local_master origin

这将创建原始主文件的本地可编辑分支。

但您也可以访问此存储库中的分支。

git co -b origin_local_dev origin/dev

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

答案 3 :(得分:0)

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

当您进行更改时,是否在将它们推回之前提交它们? Git分支指向分支上的最新 commit ,因此如果尚未提交更改,则分支仍将指向分支点,这就是您所说的正在发生的事情。

答案 4 :(得分:0)

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

git rev-parse HEAD

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

尝试两者,它们应该是等价的