这篇文章写的挺好;
https://zhuanlan.zhihu.com/p/465954849
这里要注意,git 新的命令,通过 git switch 切换分支,虽然git checkout 分支 还可以用;
在我们已经见识到git checkout
命令对于分支的三大主要操作之后,现在该到了讨论一下“游离状态的HEAD”的问题了。再次明确一下,HEAD
是Git中用来引用当前快照的指针。在Git内部,git checkout
命令只是简单地将HEAD
指针更新为指向特定分支或者commit。当它指向一个分支时,没什么问题,但是当你checkout了一个特定的commit,就会将HEAD
指针变成一个游离的指针状态。
当进入这种游离状态时,Git会警告你当前处于游离状态,你所做的任何更改也都游离于你整个项目的开发流程。如果你执意要在游离状态开展新的修改,这些修改将不会被允许再合并回任何分支。然后当你没有办法只能切换到其他分支时,这部分修改也无法被带回到新的分支:
重点在于,开发工作应该始终发生在一个分支上——而不是一个游离状态的HEAD
上。谨记这一原则可以保证你的变更提交永远都能找到。当然,如果你只是为了去看看某一个过去的提交,则无所谓是否处于游离状态。
本文重点是关于使用git checkout
命令进行分支的切换。总而言之,针对分支使用git checkout
命令,会切换当前的HEAD
指针指向。它还可用于创建分支,切换分支,checkout远程分支。git checkout
命令对于Git项目的操作来说是至关重要的。可以认为它与git merge
命令是一体两面。git checkout
命令和git merge
命令结合在一起使用才使得一系列复杂而又精妙的git 工作流程
成为可能。
本段内容引用与: https://zhuanlan.zhihu.com/p/465954849
如果临时切换 commit 历史记录,直接 git checkout commitID ;
但是修改后的提交记录,没有保存在项目中,如果切换分支后,历史记录就找不到了,除非自己一直保持中 当时的 commitID;
如果想要保留修改内容,也要保留 commit 记录,那么需要创建新的分支修改;
如果:
git checkout -b newBranchName commitID
1:
git checkout -b serverfix origin/serverfix
从远程分支 创建一个 同名的 本地分支 serverfix
git checkout -b 是 git branch 创建分支 和 git check out 切换分支两个命令;
2:当然 上个命令 可以简化为:
git checkout serverfix
git checkout 不是切换分支么?
其实是 git checkout --track origin/serverfix 的简化;
由于这个操作太常用了,该捷径本身还有一个捷径。 如果你尝试检出的分支 (a) 不存在且 (b) 刚好只有一个名字与之匹配的远程分支,那么 Git 就会为你创建一个跟踪分支:
3:
git checkout -b 可以创建一个和远程分支名字不一样或者一样的本地分支;
git checkout 当本地分支不存在,如果服务器的名字存在,就在本地创建一个同名的track分支;