本地倉庫
git commit--提交,當前節點做爲父節點,生成新節點,當前分支指向新節點(若是是操做HEAD,那就是基於HEAD所指節點和移動HEAD)
git commit --amend ----加上amend的意思是,將會以分支當前節點的父節點做爲父節點,提交一個新節點,這個節點能夠理解爲對原節點的一個修改,以下圖,c2..是對c2.的一個修改,可是這個提交沒有在c2.如下,而是在c3.如下node
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
git rebase branchName--當前分支以操做分支所在的節點爲基礎,將當前分支與操做分支所不一樣的全部節點複製一份副本,排列到操做分支節點下,而後當前分支指向副本的最後一個節點3d
git rebase targetBranchName movedBranchName
能夠操做非當前分支,即movedBranchName,而且以下組圖,git rebase bugFix side,只將c3節點拷貝到bugFix下,c2節點沒有,說明c2和c2.節點存在某種聯繫,git知道c2.能表明c2,因此就不拷貝了blog
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