如何在特定的提交中创build分支点?

在Git中,我明白分支是一个提交的指针。

我如何使特定分支指向特定的提交? 说我想在1258f0d0aae...做出master点,我该怎么做?

你必须小心这样做,因为它可能会改写那个分支的历史 – 如果你已经发布了这个分支并且其他人正在分支上工作,这将会产生问题。 而且, git reset --hard命令会丢弃所有未提交的更改(即只在工作树或索引中):

 git checkout master git reset --hard 1258f0d0aae 

您也可以通过以下方式强制更新分支:

 git branch -f master 1258f0d0aae 

…但是,如果你当时是master ,git不会让你这样做。

 git reset --hard 1258f0d0aae 

但要小心,如果后代在1258f0d0aaeHEAD之间的提交没有在其他分支中引用,它将是乏味的(但不是不可能的)来恢复它们,所以你最好在当前的HEAD ,结账master创build一个“备份”分支,并重置为您想要的提交。

另外,确保您在reset --hard之前没有未经授权的更改 – reset --hard ,他们将会真正的失去(无法恢复)。

如果你目前不在分公司,这是非常容易的:

 git branch -f master 1258f0d0aae 

这正是你想要的:它在给定的提交上指向master ,并且什么也不做。

如果你现在是主人,你需要首先进入分离状态。 我会推荐以下两个命令序列:

 git checkout 1258f0d0aae #detach from master git branch -f master HEAD #exactly as above #optionally reattach to master git checkout master 

但请注意,任何明确的操纵分支指向的地方都有可能留下任何分支无法访问的提交,从而成为垃圾收集的对象。 所以,在你inputgit branch -f前想一想!


这个方法比git reset --hard方法好,因为它不会破坏索引或工作目录中的任何东西。

git分支-f <branchname> <commit>

我和Mark Longair的解决scheme和评论一起去,并build议任何人在演戏之前阅读这些内容,但我build议重点应该放在这里

 git branch -f <branchname> <commit> 

这是我需要这样做的场景。

脚本

在错误的分支上开发,因此需要重新设置。

开始好吧

干净地开发和发布一些软件。

在这里输入图像说明

在错误的分支上开发

错误:在进一步开发的过程中偶然停留在发布分支上。

在这里输入图像说明

意识到错误

“哦,不!我意外地在发布分支上开发的。” 工作空间可能是一半的变化文件,代表正在进行的工作,我们真的不想碰和混乱。 我们只是想让git翻转几个指针来跟踪当前的状态,并把它释放回来。

为最新的开发创build一个分支,以保持迄今为止提交的工作并切换到该分支。

 git branch development git checkout development 

在这里输入图像说明

纠正分支

现在我们处于问题的情况下,需要它的解决scheme! 纠正错误(将发布分支与开发分开),并将发布分支放回原来的位置。

更正发布分支以指向最后一个实际版本。

 git branch -f release release2 

释放分支现在再次正确,像这样…

在这里输入图像说明