Git常用命令分享

Git常用命令

Git操作
  • git diff vs git log
  • git pull vs git fetch
  • git rebase
  • git revert
  • git reset vs git checkout vs git revert
  • ^ 和 ~
  • alias

1 git diff vs git log

  • git diff master..test
    比較master與test差異
  • git log master..test
    查看test中尚未并入master的提交
  • git diff master…test
    比較master與test共有分支與test分支的差異
  • git log master…test
    查看只被master或test中某一個(gè)包含的差異性提交,加上--left-right可顯示包含方
  • git diff支持目錄提交差異,git log支持文件提交差異
    git diff HEAD -- ./dir 比較dir目錄與HEAD提交的差異
    git log file 查看file提交歷史
  • git diff --stat
    統(tǒng)計(jì)所有改動(dòng)
  • git log --stat
    統(tǒng)計(jì)提交改動(dòng)

2 git pull vs git fetch

  • git fetch
    下載遠(yuǎn)程分支,然后更新本地FETCH_HEAD文件
    git fetch : git fetch origin
  • git pull
    下載遠(yuǎn)程分支,然后合并至當(dāng)前HEAD
    git pull = git fetch + git merge FETCH_HEAD

多用git fetch,少用git pull

3 git rebase

  • 線性提交 與git merge功能類(lèi)似
    git merge:新的提交將分支的提交歷史連在一起,生成merge提交
    git rebase:重寫(xiě)提交歷史,把整個(gè)分支移動(dòng)到待合并分支后
  • 壓縮提交
    刪除不必要的提交

線性提交

  • merget提交


  • rebase提交


  • 一個(gè)實(shí)例
  • merge


    merge
  • rebase


    rebase

壓縮提交

git rebase 使用

使用git rebase:一個(gè)干凈的線性的提交歷史

  • git rebase <branch>
    以<branch>為基,重寫(xiě)當(dāng)前提交歷史 [可以加上 -i]
  • git merge-base <branch1> <branch2>
    返回基提交ID
  • git rebase –i HEAD~3
    重寫(xiě)當(dāng)前HEAD最新3次提交歷史
  • git pull –rebase
    通過(guò)變基來(lái)整合遠(yuǎn)程分支

注意:
rebase會(huì)重寫(xiě)提交歷史,不要在公共的分支上使用

4 git revert

  • git revert
    生成一個(gè)新的提交,撤銷(xiāo)一個(gè)已經(jīng)存在提交的所有修改

對(duì)于merge commit的提交:git revert –m 1[2] <commit>
-m i :需要保留的父節(jié)點(diǎn)是第i父提交

git revert
  • git revert需要注意的問(wèn)題
    合并曾經(jīng)被revert的提交,會(huì)保留revert的信息,從而導(dǎo)致部分提交無(wú)法應(yīng)用到新的分支,解決這個(gè)最好的方式是撤消還原原始的合并


    撤銷(xiāo)還原

5 git reset vs git checkout vs git revert

提交層面

  • git reset
    reset將分支的末端指向另一個(gè)提交,移除當(dāng)前提交
  • git checkout
    checkout移動(dòng)HEAD指向某個(gè)引用
  • git revert
    重新生成一個(gè)提交增加到當(dāng)前的commit

git reset --soft –mixed --hard

git reset作用域

文件層面

  • git reset
    將緩存區(qū)同步至指定的提交,不影響工作目錄
  • git checkout
    將工作目錄同步至指定的提交,不影響提交
  • git revert
    無(wú)文件層面操作

總結(jié)

命令 作用域 常用情景
git reset 提交層面 在私有分支上舍棄一些沒(méi)有提交的更改
git reset 文件層面 將文件從緩存區(qū)中移除
git checkout 提交層面 切換分支或查看舊版本
git checkout 文件層面 舍棄工作目錄中的更改
git revert 提交層面 在公共分支上回滾更改
git revert 文件層面 (然而并沒(méi)有)

6 ^ 和 ~

  • 相當(dāng)于父提交,有多個(gè)父提交時(shí),加上數(shù)字表示第幾個(gè)父提交,相當(dāng)于^1
  • ~n相當(dāng)于連續(xù)的n個(gè)^
    一個(gè)例子

    HEAD^:4927 HEAD^2:063f HEAD^3:4f9c
    HEAD~:4927 HEAD~2:1c73

7 alias

  • st=status co=checkout br=branch ci=commit
  • mg=merge md=commit --amend dt=difftool mt=mergetool
  • last=log -1 HEAD cf=config line=log --oneline visual=!gitk
  • ls=log --pretty=format:\"%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green)[%cn]\" --decorate --date=short
  • hist = log --pretty=format:\"%C(yellow)%h %C(red)%d %C(reset)%s %C(green)[%an] %C(blue)%ad\" --topo-order --graph --date=short
  • lg=log --color --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit
  • ld = log --pretty=format:"%C(yellow)%h\\ C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short --graph

深入學(xué)習(xí)

git recipes

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容