Git 如何在特定提交处创建分支点?

Git 如何在特定提交处创建分支点?,git,git-branch,Git,Git Branch,在Git中,我理解分支是指向提交的指针 如何使特定分支指向特定提交?假设我想让master指向1258f0d0aae…,我该怎么做?您可以通过以下方式使master指向1258f0d0aae: git checkout master git reset --hard 1258f0d0aae 但你在做这件事时必须小心。它很可能改写该分支的历史。如果您已经发布了它,而其他人正在该分支上工作,则会产生问题 另外,git reset--hard命令将丢弃任何未提交的更改(即仅在工作树或索引中的更改)

在Git中,我理解分支是指向提交的指针


如何使特定分支指向特定提交?假设我想让
master
指向
1258f0d0aae…
,我该怎么做?

您可以通过以下方式使
master
指向
1258f0d0aae

git checkout master
git reset --hard 1258f0d0aae
但你在做这件事时必须小心。它很可能改写该分支的历史。如果您已经发布了它,而其他人正在该分支上工作,则会产生问题

另外,
git reset--hard
命令将丢弃任何未提交的更改(即仅在工作树或索引中的更改)

您还可以使用以下命令强制更新分支:

git branch -f master 1258f0d0aae
。。。但如果您当时在
master
上,git不会让您这样做

git reset --hard 1258f0d0aae
但是要小心,如果在
1258f0d0aae
HEAD
之间的子体提交未在其他分支中引用,则恢复它们将非常繁琐(但并非不可能),因此您最好在当前
HEAD
处创建一个“备份”分支,签出
master
,然后重置为所需的提交

另外,请确保在重置--hard之前没有未提交的更改,它们将真正丢失(无法恢复)。

git branch-f 我赞同马克·朗盖尔的解决方案和评论,并建议所有人在表演前阅读这些内容,但我建议重点应该放在

git branch -f <branchname> <commit>

纠正分支 现在我们正处于问题状态,需要它的解决方案!纠正错误(将发布分支与开发一起向前推进),并将发布分支恢复原样

更正发布分支以指向上一个实际发布

git branch -f release release2
发布分支现在再次正确,如下所示

如果我把错误推到遥控器上怎么办?
git push-f
在另一个线程中得到了很好的描述,尽管标题中的“覆盖”一词有误导性。

如果您当前不在branch master上,这非常简单:

git branch -f master 1258f0d0aae
这正是您想要的:它将
master
指向给定的提交,而不执行其他操作

如果您当前在master上,您需要首先进入分离头部状态。我建议使用以下两种命令序列:

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

#optionally reattach to master
git checkout master
但是,请注意,对分支点位置的任何显式操作都有可能留下任何分支都无法访问的提交,从而成为垃圾收集的对象。所以,在键入git branch-f之前,请先考虑一下



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

dup我认为:@akostadinov是的,并且这种方法的答案更具信息性(IMHO),以防有人意外地这样做,需要撤销一些事情,请参阅
git reflog
并使用
git push-f
来推送您不需要的--硬推
git checkout 1258f0d0aae    #detach from master
git branch -f master HEAD   #exactly as above

#optionally reattach to master
git checkout master