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

7

我对GIT的某些内容感到困惑。

我们有一个包含多个分支的代码库。我可以获取其中一个分支的本地副本(git checkout -b ...),然后进行一些更改,然后将更改推回。然而,如果我未标记该分支的末尾,其他用户如何获得该分支的head?当他们使用git checkout获取该分支时,他们会得到该分支在某个点上的代码,而不是该分支的head。

我错过了什么吗?

编辑:我晚入这个项目,并参与了从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分支并确保我拥有该分支上的最新代码?


“标签”是什么意思?你能举个例子说明你想做什么和你的期望吗? - Dustin
5个回答

10

他们可以从远程仓库拉取代码以获取远程分支的HEAD。

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

我在这里假设远程代码库的名称为 origin,你可以用实际的名称来代替它。


5

听起来你在做正确的事情。一个分支的名称只是指向该分支上最新提交的指针。你确定你正在进行提交和推送更改回每个人都要拉取的仓库吗?当你提交时,你只会提交到你的本地仓库,所以为了获取更改,协作者必须从你的本地仓库拉取(a),或者从你已经使用 git push 推送你的更改到其他可访问的仓库中拉取(b)。


一个分支的名称只是指向该分支上最新提交的指针。我从未想过这一点。谢谢,这让我受益匪浅。 - Jacky Supit

1

Git clone、pull 和 fetch 可以与整个仓库树一起使用。分支只是本地仓库中的标签。

当你完成克隆操作后,你就拥有了远程仓库在 origin 中的副本。你可以通过本地检出来访问它。

git co -b origin_local_master origin

这将创建一个本地可编辑的源主分支。

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

git co -b origin_local_dev origin/dev

这将创建一个本地可编辑的 dev 原始分支的分支。


0

只是为了确保我们没有忽略显而易见的事情:

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


0

如果你谈论的是本地分支而不是远程分支,这两个命令都可以给你最新的提交哈希:

git rev-parse HEAD

并且

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

尝试使用它们两个,它们应该是等效的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接