我很难理解有关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分支知道我已经得到了那个分支上的最新代码?
答案 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"
尝试两者,它们应该是等价的