记录 关于 git命令集

本地仓库
git commit--提交,当前节点做为父节点,生成新节点,当前分支指向新节点(若是是操做HEAD,那就是基于HEAD所指节点和移动HEAD)
git commit --amend ----加上amend的意思是,将会以分支当前节点的父节点做为父节点,提交一个新节点,这个节点能够理解为对原节点的一个修改,以下图,c2..是对c2.的一个修改,可是这个提交没有在c2.如下,而是在c3.如下node

1829

git branch newBranchName--建立一个新分支,新分支指向当前分支节点
git branch -f master HEAD~3--强制修改分支位置
git branch -f branchName branchName^
git branch -f branchName nodeHashgit

git checkout branchName--切换分支
git checkout -b newBranchName--基于当前分支节点建立新分支,并切换到新分支ide

git merge branchName--生成一个新节点,这个节点同时指向当前分支和合并分支所在的节点(拥有两个父节点),当前分支指向新节点,以下图spa

1668

git rebase branchName--当前分支以操做分支所在的节点为基础,将当前分支与操做分支所不一样的全部节点复制一份副本,排列到操做分支节点下,而后当前分支指向副本的最后一个节点3d

1671
1678

git rebase targetBranchName movedBranchName
能够操做非当前分支,即movedBranchName,而且以下组图,git rebase bugFix side,只将c3节点拷贝到bugFix下,c2节点没有,说明c2和c2.节点存在某种联系,git知道c2.能表明c2,因此就不拷贝了blog

1875
1873

git rebase -interactive branchName
交互式rebase,使用-i参数能够选择复制过去的节点并进行排序排序

HEAD
git checkout branchName,此时是切换到分支,HEAD指向分支名,分支指向节点
git checkout nodeHash,此时HEAD指向节点,一样能够执行commit,merge,rebase等操做
能够理解为,git的操做自己是基于HEAD所在的位置,在分支上就是操做分支(操做分支同时也操做节点的),在节点上就是操做节点get

相对引用
可使用^/^^^^或者~2
git checkout branchName^^
git checkout branchName~2
git checkout HEAD^^
git checkout HEAD~2
不能使用git checkout nodeHash^^/~2的形式hash

撤销变动
git reset branchName^^/~2
git reset HEAD^^/~2
reset是将当前分支(或者HEAD)向前移动到某个节点,效果跟git branch -f branchName branchName^是同样的(只是git branch -f只能操做分支)。it

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

相关文章
相关标签/搜索