繁体   English   中英

git:远程分支和HEAD之间的git log处于分离的HEAD状态

[英]git: git log between remote branch and HEAD being in detached HEAD state

git checkout -t原始/5.0

* df957e8 (HEAD, origin/5.0, 5.0) commit A
* 93f3185 commit B
* abd1176 commit C

我使用以下命令从gerrit中签出了一个更改

git fetch gerrit refs / changes / 36/236/1 && git checkout FETCH_HEAD

现在,它进入分离的HEAD状态,在master分支而不是5.0上有传入的提交

    * bdd7f9c (HEAD) part 3 of 236
    * fa8f60f part 2 of 236
    * bddd168 part 1 of 236
    * ffc7982 (origin/master, origin/HEAD) commit master
    * 415668e 
    * 991d48d 

我希望它像

* bdd7f9c (HEAD) part 3 of 236
* fa8f60f part 2 of 236
* bddd168 part 1 of 236
* df957e8 (HEAD, origin/5.0, 5.0) commit A
* 93f3185 commit B
* abd1176 commit C

我尝试使用symbolic-ref将HEAD指向refs / heads / 5.0,但是在签出FETCH_HEAD之后,它立即显示在master分支的顶部,而不是5.0。

我的目的是使用命令获取来自gerrit更改结帐的提交列表

“ git log --format =”%H“ origin / 5.0..HEAD”

但它在这种情况下不起作用,因为它是从master而不是5.0检出的

如果我缺少任何东西,请告诉我

这里发生了几件事。 首先,在所需的结果中,不能有两个HEAD 始终只有一个HEAD

当当前的分支提交名称未被任何分支名称或标记引用时,您将获得分离的头状态。

现在,关于为什么将提交置于master而不是5.0之上。 每个提交都引用一个父提交。 即每个提交都有一个父节点,该父节点由其哈希引用。 当您获取更改时,获取的提交还带有其父引用,并被相应放置。 例如,假设以下是远程仓库的状态:

A -> B -> C (C是最新提交)

并且您在本地具有以下历史记录:

A -> B

现在,无论您从哪个分支中提取或获取,在获取提交C时,都将在此处查找提交B集。

意思是,从哪里调用获取都没有关系。 特定的提交将驻留在最初进行提交的同一父对象上。

如果您仍然需要移动这3个提交,建议您考虑rebase 除非您是回购的唯一贡献者,否则重新定基公共承诺肯定会咬住您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM