如何将主分支移动到最新提交?

57
* [971f835] (HEAD, original_idea) Now working here. Some comment 9
* [692b673] Some comment 8
* [3ebff62] Reverted to original idea. Some comment 7
| * [72ea01d] (master) Decided it wasn't worth the effort. Some comment 6
| * [985c1ad] Some comment 5
| * [4d7d491] Some comment 4
| * [0c697bb] Branched to try an idea. Some comment 3
|/
* [7280b1f] Some comment 2
* [5c2c6d0] Some comment 1
* [bc7aac6] Initial commit

看起来master 被落下了。不确定是怎么发生的。一旦我决定放弃之前的分支,我就检出了[7280b1f],然后从那里继续。

我该怎么修复这个问题?这是臭名昭著的“游离 HEAD”问题吗?

为了保持仓库的最佳健康状态,master 是否必须与HEAD对齐?

我的工作流非常简单,只是管理一个文本文件。在绝大多数情况下,它会是:

git add .
git commit -am "Some comment"

就是这样。

我决定尝试一个想法并创建了一个分支。当它没有成功时,我检出该分支的根目录并回到git add/commit例程。


2个回答

63
如果git branch显示你当前的分支是original_idea,那就不是分离头指针的情况。
但无论如何,如果你想让你的master反映出你的“当前提交”(在Git中意味着HEAD的含义),请按照以下步骤操作:
git branch -f master HEAD
git checkout master

在 "如何将我的提交从“无分支”移动到实际分支?" 中,您可以找到其他替代方案。

问题在于这会使当前结束于主分支的整个分支消失。

然后您需要做的就是:

  • 确保 HEAD 被一个分支引用(比如您模式中的 original_idea 分支)
  • 将该分支在主分支之上进行变基(rebase):

这意味着:

git checkout original_idea
git rebase master
git checkout master
git merge original_idea

问题在于这会使目前以master结尾的整个分支消失。我有什么遗漏吗? - martin's
这里的“original_idea”表示什么?它是head还是origin/master? - prasanthMurugan
@prasanthMurugan 在将主分支指向该分支之前,您需要在主分支之上重放所需的分支,并通过快进合并来完成。 - VonC
谢谢回复,我创建了一个新的分支并解决了这个问题。 - prasanthMurugan

26

这是臭名昭著的“游离头指针”问题吗?

不是,HEAD 指向分支original_idea

为了仓库的最佳状态,master必须与HEAD对齐吗?

不需要,master只是一个约定俗成的名称,通常用于表示一个可构建并希望是工作快照的分支。

我该如何解决这个问题?

如果你已经将 master 推送到另一个仓库,你需要将 original_idea 中的更改合并到 master 中:

git checkout master
git merge original_idea

请注意,如果有任何冲突的更改,您需要解决它们。

如果您尚未将 master 推送到另一个存储库,则可以删除 master 并从 original_idea 重新创建它。警告: 所有正在使用 master 的人都必须重置他们的 master 分支。

$ git checkout master
Switched to branch 'master'

$ git checkout -b experiment_1
Switched to a new branch 'experiment_1'

# Here we are going to delete master.  Should be safe, since experiment_1
# was created from this point on the previous command

$ git branch -d master
Deleted branch master (was 72ea01d).

$ git checkout original_idea 
Switched to branch 'original_idea'

# Now that we checked out the branch HEAD is pointing to, we can recreate master

$ git checkout -b master
Switched to a new branch 'master'

1
我能请你再处理一个情况吗?将master移动到HEAD,同时通过先将其重命名为experiment_1来保留当前命名为master的分支。换句话说,结构完全不变,只是标签移动了。谢谢! - martin's
你的图表中想要哪个提交作为 master 的顶端? - Ed I
“72ea01d”,在这里master现在的位置,将被命名为“experiment_1”。然后,master将移动到HEAD现在所在的位置,“971f835”。谢谢!我正在通过一些在线教程努力理解。 - martin's
是的,我在尝试任何操作之前都会备份我的代码库。我还不太信任我的 Git 技能。我今天稍后再试。谢谢! - martin's
这里的original_idea表示什么?它是head还是origin/master? - prasanthMurugan
显示剩余4条评论

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