git - 重新定义大师头?

标签 git

我有一个存储库,其中的提交已消失:

... C1 ... C2 ... C3 ... Cn 在 master 分支上,假设我只在 Cn 提交点发现代码有一些重大问题需要时间来调试,我希望尽快有一个稳定/好的Master。假设我知道 C3 是最后一个已知的好点。有没有办法让我重新定义主头为C3,并将Cn标记为新的分支头,比如“调试”分支? (存储库是远程的,但假设它不是公开共享的)。

最佳答案

摘要

在 Git 中,master 只是指向给定提交的另一个分支标签。从技术上讲,您甚至根本不需要存储库中存在名为 master 的分支。

您的两个最佳选择是 git-checkoutgit-reset,具体取决于您是要移动还是丢弃历史记录。前者是您所要求的,而后者是为了完整性而包含在内。

使用 checkout

您可以通过将主分支重置为任意提交来执行您想要的操作。例如:

# Move current master branch aside.
git branch -m master debug

# Create a new branch at committish. Use a branch name or a commit ID.
git checkout -b master c3

使用重置

或者,如果您不关心现有历史记录,最快的解决方案是将 master 的 HEAD 重置为提交。例如,假设您已经位于 master 分支上:

git reset --hard c3

虽然这不会让您当前的历史记录在主分支中可用,但在修剪之前仍然可以通过引用日志访问完整的历史记录。

关于git - 重新定义大师头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39397807/

相关文章:

git - 为什么 git 显示两个明显相同的添加文件之间存在冲突?

git - 这个分支是从哪个 git 分支 checkout 的?

git - 是否有任何插件可以在 ubuntu 上的 gedit 上使用 git?

git - 从先前提交的 .git 目录中删除文件

git - 为什么不能部分克隆 git 存储库?

Git:如果文件大于预定义的大小,则发出警告

macos - git 存档 --format=tar HEAD :mydir/| tar t -> fatal: current working directory is untracked

c# - 使用 LibGit2Sharp 暂存未跟踪文件时,Commands.Stage() 不会增加 Staged.Count

eclipse - 如何从 Eclipse 中错误的 git merge 中恢复

php - 如何在 gitlab 中使用 php lint 只显示和修改文件?