到现在为止,我一直用git checkout <branch_name>; git reset --hard <hash>
将分支移回较早的提交。
然后我遇到了这个问题 https://stackoverflow.com/questions/5471174/git-move-branch-pointer-to-different-commit,但是答案和评论并没有很详细地解释它们之间的差异。
假设我有一个干净的工作树,两者之间有什么内部差异
git branch -f <branch_name> <hash>
and
git checkout <branch_name>
git reset --hard <hash>
这些差异(如果有的话)对高级使用有什么微妙的影响吗?
主要区别在于git branch -f <branchname> <commitref>
moves <branchname>
指向指定的提交不碰 HEAD
, the index or the 工作副本, while git checkout <branchname> && git reset --hard <commitref>
修改所有三个。
如果你想在不移动的情况下快速重新排列分支HEAD
或修改您当前的工作树,然后git branch -f
是一个好方法。如果你有的话它也会起作用未提交的更改,如果您使用,这并不总是可能的git checkout
.
另一个差异与性能有关,但仅与very大型项目。
在这些情况下,修改你的工作树git checkout
and git reset --hard
可能是一个昂贵的操作有大量磁盘 I/O。另一方面,与git branch -f
only a 单个文件将被写入磁盘上,即包含<commithash>
引用者<branchname>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)