本地仓库
git commit--提交,当前节点作为父节点,生成新节点,当前分支指向新节点(如果是操作HEAD,那就是基于HEAD所指节点和移动HEAD)
git commit --amend ----加上amend的意思是,将会以分支当前节点的父节点作为父节点,提交一个新节点,这个节点可以理解为对原节点的一个修改,如下图,c2..是对c2.的一个修改,但是这个提交没有在c2.以下,而是在c3.以下
git branch newBranchName--创建一个新分支,新分支指向当前分支节点
git branch -f master HEAD~3--强制修改分支位置
git branch -f branchName branchName^
git branch -f branchName nodeHash
git checkout branchName--切换分支
git checkout -b newBranchName--基于当前分支节点创建新分支,并切换到新分支
git merge branchName--生成一个新节点,这个节点同时指向当前分支和合并分支所在的节点(拥有两个父节点),当前分支指向新节点,如下图
git rebase branchName--当前分支以操作分支所在的节点为基础,将当前分支与操作分支所不同的所有节点复制一份副本,排列到操作分支节点下,然后当前分支指向副本的最后一个节点
git rebase targetBranchName movedBranchName
可以操作非当前分支,即movedBranchName,并且如下组图,git rebase bugFix side,只将c3节点拷贝到bugFix下,c2节点没有,说明c2和c2.节点存在某种联系,git知道c2.能代表c2,所以就不拷贝了
git rebase -interactive branchName
交互式rebase,使用-i参数可以选择复制过去的节点并进行排序
HEAD
git checkout branchName,此时是切换到分支,HEAD指向分支名,分支指向节点
git checkout nodeHash,此时HEAD指向节点,同样可以执行commit,merge,rebase等操作
可以理解为,git的操作本身是基于HEAD所在的位置,在分支上就是操作分支(操作分支同时也操作节点的),在节点上就是操作节点
相对引用
可以使用^/^^^^或者~2
git checkout branchName^^
git checkout branchName~2
git checkout HEAD^^
git checkout HEAD~2
不能使用git checkout nodeHash^^/~2的形式
撤销变更
git reset branchName^^/~2
git reset HEAD^^/~2
reset是将当前分支(或者HEAD)向前移动到某个节点,效果跟git branch -f branchName branchName^是一样的(只是git branch -f只能操作分支)。
git revert branchName^^/~2
git revert HEAD^^/~2
revert是将回退到的那个位置的节点拷贝一份追加到最后成为一个新节点,然后将分支指向新节点
两者的区别:
reset如果设置为当前分支指向的节点,则整个分支不会有什么变化,而revert还是会将当前分支指向的节点拷贝一份成为新节点重新指向
因为reset是将分支重新指到之前的节点,所以作为远程分支其他客户端是无法感知到的,此时应该用revert
git cherry-pick nodeHash nodeHash nodeHash
cherry-pick直接将选中的节点拷贝一份追加到当前分支下
git tag versionNum branchName/nodeHash(如果branchName/nodeHash缺省,就在HEAD的位置节点上创建标签),标签名称不能重复,可以删除重设
git describe branchName/nodeHash(branchName/nodeHash缺省的话,则为HEAD) --
返回参数 <tag>_<numCommits>_g<hash>|tag名_提交数_查询节点hash
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。