git branch
git branch branchName :
效果:生成一个branch,名字为branchName
git checkout -b branchName:可以快速创建branch并且把HEAD指针指向这个branch
git branch -f branchName location
移动branchName 这个分支指针到某一个具体的位置,如果此时HEAD指针指向branchName指针,那么HEAD也会被一起移动.如果HEAD分离,那么branchName指针自己单独移动
ps:很多操作HEAD指针的动作,如果当HEAD指针指向了某一个branch的时候,那么这个branch会和HEAD一起移动:如git commit ,如果HEAD被分离了的话,commit的时候其实是HEAD指针去指向自增的node.
git reset:
git reset后面跟一个位置:如git reset HEAD^
作用的对象是:node<-branch<-HEAD模式,HEAD不能分离(必须要指向某一个branch)
效果是:带动branch<-HEAD一起到某一个位置(node)上,不仅可以回退,还可向后,所以说了这个命令是带动branch和HEAD指针到某一个位置上.
这个命令是不是很像git branch -f branch +location?没错!
git revert:撤销
git revert nodeName(也就是commitID)代表要撤销某个节点
这里一开始master*在c2上,然后用了git revert c2命令,代表要撤销c2(不想用c2了,想用c1)
作用是新增一个节点,其实c2‘ 节点和c1节点是一致的,这样就可以把它推送到远端,别人就可以用回退的节点了.
git rebase
git rebase location
是把HEAD当前所在的位置的分支搞到location处
相对位置:
首先相对位置指的都是某一位置的前面,而不是后面!
1.^
比如:HEAD^指的是HEAD指针所在节点的前一个节点的位置
但^2代表的是第二个父节点
2.~
其实和^相比,~能够一次向上移跨多个节点. 如HEAD~2等于两次HEAD^
小场景:
自己先clone下来了一个一项目,并对项目commit了一次,而此时同事已经对此项目push了一次commit.那么现在我想要push 我的commit应该怎么办?
如果直接push,git会直接拒绝,因为我的本地分支落后于远程分支,所以我应该先下载下来远程分支,然后merge或者rebase变成最新的分支,最后再push.
这个网站很好,动画学习git:
https://learngitbranching.js.org/?demo=&locale=zh_CN