mer*_*011 17 git branch git-checkout
到目前为止,我一直习惯git checkout <branch_name>; git reset --hard <hash>
将分支移回早期的提交.
然后我遇到了这个问题,但答案和评论并没有详细解释它们之间的差异.
假设我有一个干净的工作树,它们之间有什么内部差异
git branch -f <branch_name> <hash>
Run Code Online (Sandbox Code Playgroud)
和
git checkout <branch_name>
git reset --hard <hash>
Run Code Online (Sandbox Code Playgroud)
并且这些差异(如果有的话)对高级用法有任何微妙的影响吗?
Enr*_*lio 18
主要区别在于git branch -f <branchname> <commitref>
移动<branchname>
指向指定的提交而不触摸 HEAD
,索引或工作副本,同时git checkout <branchname> && git reset --hard <commitref>
修改所有三个.
如果您想在不移动HEAD
或修改当前工作树的情况下快速重新排列分支,那么这git branch -f
是一个很好的方法.如果您有未提交的更改,它也会起作用,如果您使用,这种情况并非总是可行git checkout
.
另一个区别与性能有关,但它仅适用于非常大的项目.
在这些情况下,使用大量磁盘I/O 修改工作树git checkout
并且git reset --hard
可能是一项昂贵的操作.另一方面,git branch -f
只有一个文件将写在磁盘上,即包含<commithash>
引用的文件<branchname>
.