例如,如果我有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
有什么区别吗?
2条答案
按热度按时间roejwanj1#
分支状态没有区别,分支只是一个提交的引用(参见
.git/refs
),你如何给引用branchA
赋值并不重要,只要赋值了就行。但是如果你已经有一个远程分支,并且你使用
--set-upstream
将它们关联起来,这样没有参数的git push
就知道要推送到哪个分支,那么重命名的分支将继续引用旧的分支。另一个可能并不重要的区别是日志。Git在
.git/logs
(可以使用git reflog
访问)中的日志中捕获事件序列。因此,由于Git跟踪分支指向的提交和您 checkout 的提交,这部分会有所不同。但仅在您的本地存储库中-这些信息不会推送到远程存储库。8i9zcol22#
如果你知道
commitA
和commitB
的ID,就不需要第三个分支。而且,对于这个特定的目的,没有区别....你也可以通过移动指针来获得乐趣,而不是在工作树上跳舞: