6

我正在努力了解有关 GIT 的一些信息。

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

我在这里想念什么?

编辑:我很晚才加入这个项目,并参与了 CVS 到 GIT 的转换。我假设 FOO_3_4_0001... 标记沿分支的所有标记点以 FOO_3_4_0001_INITIAL 开始。我该如何检查?

编辑2:感谢所有提供答案的人。事实证明,标签 FOO_3_4_0001 不在 3.4 分支上,这就是我一直缺少的。我已经安排好了私刑派对。


@goseb,没用。我试过这个:

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 分支知道我已经获得了最新的代码那个分支?

4

5 回答 5

8

他们可以从远程存储库中获取远程分支的 HEAD。

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

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

于 2009-01-19T05:08:43.803 回答
5

听起来你在做正确的事。分支的名称只是指向分支上最新提交的指针。您确定您正在将更改推送回每个人都从中提取的存储库吗当您提交时,您只是提交到本地存储库,因此要获得更改,协作必须(a)从本地存储库中提取,或(b)从您使用git push.

于 2009-01-19T04:56:43.983 回答
1

Git clone、pull 和 fetch 正在与整个存储库树一起工作。分支只是本地存储库中的标签。

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

git co -b origin_local_master origin

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

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

git co -b origin_local_dev origin/dev

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

于 2009-01-19T05:51:47.380 回答
0

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

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

于 2009-01-19T05:48:40.773 回答
0

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

git rev-parse HEAD

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

尝试它们,它们应该是等效的

于 2018-01-15T20:52:26.777 回答