git 重命名分支和重置--硬分支之间有区别吗?

krcsximq  于 2023-03-28  发布在  Git
关注(0)|答案(2)|浏览(138)

例如,如果我有branchA指向commitA,branchB指向commitB,现在我想交换它,即branchA指向commitB,branchB指向commitA。
有两种方法。
第一种方法,通过重命名:

git checkout branchA
git branch -m branchDummy
git checkout branchB
git branch -m branchA
git checkout branchDummy
git branch -m branchB

或者,我可以:

git checkout branchA
git branch branchDummy
git reset --hard commitB
git checkout branchB
git reset --hard commitA
git branch --delete branchDummy

有什么区别吗?

roejwanj

roejwanj1#

分支状态没有区别,分支只是一个提交的引用(参见.git/refs),你如何给引用branchA赋值并不重要,只要赋值了就行。
但是如果你已经有一个远程分支,并且你使用--set-upstream将它们关联起来,这样没有参数的git push就知道要推送到哪个分支,那么重命名的分支将继续引用旧的分支。
另一个可能并不重要的区别是日志。Git在.git/logs(可以使用git reflog访问)中的日志中捕获事件序列。因此,由于Git跟踪分支指向的提交和您 checkout 的提交,这部分会有所不同。但仅在您的本地存储库中-这些信息不会推送到远程存储库。

8i9zcol2

8i9zcol22#

如果你知道commitAcommitB的ID,就不需要第三个分支。而且,对于这个特定的目的,没有区别....你也可以通过移动指针来获得乐趣,而不是在工作树上跳舞:

git checkout --detach
git branch -f branchA commitB
git branch -f branchB commitA

相关问题