分支的名称指向分支的提示/结束提交。
是否有一个命令直接使分支的名称更改为指向不同的现有提交(例如原始提示提交的某些祖先/后代)?
"直接",我的意思是命令将提交移动到(或类似的东西)并将分支的名称作为参数。
通过"间接",我的意思是,例如,提交,合并,变基,推送和提取/提取,移动分支的名称,但不承诺提交移动到(或类似的东西)作为论据。
答案 0 :(得分:2)
$ git checkout the-branch
$ git reset <commit-hash>
如果您还希望让您的工作目录反映该提交的状态,请添加--hard
标志。
--hard
标记,那么您将失去自该提交以来所做的所有进度。除非您对当前分支的提示有其他参考,否则您将无法(但reflog
)回到当前的状态。答案 1 :(得分:1)
git branch -f $BRANCH $COMMIT
请注意,您尝试移动的分支不能是您当前的分支。有关详细信息,请参阅man page。
答案 2 :(得分:1)
分支的名称指向分支的提示/结束提交。
正确(根据定义,确实如此)。
是否有一个命令直接将分支的名称更改为指向不同的现有提交(例如原始提示提交的某些祖先/后代)?
创建或更改引用的目标SHA-1 ID的低级命令是git update-ref
。使用它有点棘手,因为它要求你拼出完整的参考名称:
$ git update-ref refs/heads/foo newvalue [ oldvalue ]
(如果引用没有预期值,则添加oldvalue
部分会使其出错;有关详细信息,请参阅the documentation。它也能打破象征性的参考。
git branch
command将允许您将分支移动到新的目标提交,如Corubba already noted。它更适合于临时使用(不像git update-ref
那样容易出错)但对脚本编写更不适合(在那里你需要严密但完全的控制)。
git reset
command允许您移动HEAD
为符号引用的分支,或者在HEAD
不是符号引用时更改HEAD
中存储的值(即,当你处于“超级HEAD”模式时)。但它不能移动任何其他分支;它还对索引(除了--soft
模式以外的任何其他方式)进行操作,git branch
和git update-ref
都没有。