Git經常使用命令總結

一、Git是什麼?與SVN的區別在哪裏?

區別 Git SVN
定義 Git是分佈式版本控制系統。沒有中央服務器,每一個人電腦上都是一個完整的版本庫。 SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,幹活的時候先從中央服務器獲得最新的代碼,幹完活你再把本身的代碼推送到中央服務器
是否聯網 Git只有在pull和push等操做的時候才須要聯網。 SVN只有在聯網的狀況下才能工做。
版本記錄 Git在斷網的狀況下,能夠在本地保存版本記錄。因此合併起來很方便。同時能夠在沒網的狀況下查看開發的版本歷史。 在斷網的狀況下,SVN不工做,既不能提交也不能回滾,因此也不會有本地記錄。
歷史庫的存放位置 Git本地倉庫包含代碼庫和歷史庫,在本地的開發環境中就能夠記錄歷史。 SVN的歷史庫存在中央倉庫,每次對比和提交代碼都必須鏈接到中央倉庫才行

Git和SVN的最根本區別在於歷史版本維護的問題。javascript

二、Git倉庫

1、 建立git倉庫的方案
    1 、第一種方案:在現有目錄下初始化倉庫
        1)建立一個文件夾
            mkdir vue
        2)在該文件夾下新建倉庫
            git init  
            //此時vue目錄下會出現一個.git的目錄,該目錄是用來跟蹤管理版本的
    2、第二種方案:克隆現有的倉庫
        git clone git@github.com:tangjie1111/vue.git
2、將本地倉庫跟遠程庫關聯起來(在本地倉庫文件夾下(vue)輸入下面的命名)
    1、第一步,在GitHub上面新建一個空的倉庫
        Create a new repo 
        //而後在Repository name填入vue,此時能夠從這個倉庫克隆出新的倉庫,也能夠把一個已有的本地倉庫與之關聯。而後把本地倉庫的內容推送到GitHub倉庫,
    2、第二步,將GitHub上的倉庫關聯到本地
        git remote add origin git@github.com:tangjie1111/vue.git 
        //git@github.com:tangjie-93/vue.git是倉庫地址,tangjie1111是該用戶吧帳號名。 origin表示倉庫的名稱

        //關聯多個遠程倉庫
        git remote add github git@github.com:tangjie-93/learngit.git 
        //關聯github帳戶爲tangjie-93,名爲github的遠程倉庫
        git remote add gitee git@github.com:james/learngit.git
        //關聯github帳戶爲james,名爲github的遠程倉庫
3、將遠程倉庫的內容拉取到本地且和本地分支合併
        git pull origin master
4、將遠程倉庫的內容拉取到本地
        git fetch [remote-name]
        //訪問遠程倉庫,從中拉取全部你尚未的數據
5、將當前分支內容推送到遠程分支
    git push [remote-name] [branch-name]
    git push -u origin master
    //將本地庫的全部內容推送到遠程庫。將當前分支master推送到遠程。參數u使得Git不但會吧本地的master分支內容推送到遠程的master分支,還會把本地的master分支和遠程的master分支關聯起來。在之後的推送和拉取就能夠簡話化命令了。以後的推送就能夠不用加u了。
    git push origin dev 或者git push origin dev:dev 
    //表示將當前分支推送到dev遠程分支。origin是默認倉庫名稱,也可使用其餘名稱
    git push origin dev:test
    //將本地的dev分支內容推送到遠程倉庫上的test分支

6、查看遠程倉庫的名稱
    git remote 
    //查看遠程倉庫的名稱
    git remote -v
    //查看遠程倉庫的信息
    git remote show [remote-name]
    //查看某一個遠程倉庫的更多信息
7、取消本地目錄下關聯的遠程庫
    git remote rm origin
    //刪除已有的遠程倉庫
8、重命名遠程倉庫
    git remote rename dev test
9、重命名本地庫
    git branch -m current-branch-name new-branch-name
10、在本地新建一個分支來跟蹤遠程分支
    git checkout -b serverfix origin/serverfix
    git checkout -b sf origin/serverfix 
    //將本地分支的名字改成sf
    git checkout --track origin/serverfix
11、設置已有的本地分支跟蹤一個剛剛拉取下來的遠程分支
    git branch -u origin/serverfix
12、將全部的本地分支列出來而且包含更多的信息
    git branch -vv 
    //通常要先將服務器上的數據線拉取過來 git fetch --all
13、刪除一個遠程分支
    git push origin --delete serverfix
複製代碼

三、Git設置配置項

//對這臺機器上全部的Git倉庫都會使用這個配置,固然也能夠對某個倉庫指定不一樣的用戶名和郵箱
1、配置名字
    git config --global user.name "james";
2、配置郵箱
    git config --global user.email "14232134576.@qq.com";
3、查看配置列表
    git config --list 
4、查看某一配置項
    git config user.name
5、查看git有哪些命令
    git help 
    git help config //獲取config命令的手冊
6、配置git命令別名
    git config --global alias.status st
    git config --global alias.co checkout
    git config --global alias.br branch
    git config --global alias.ci commit
    git config --global alias.unstage 'reset HEAD --'
    git config --global alias.last 'log -1 HEAD'
複製代碼

四、版本回退

1、查看最近到最遠的提交日誌
    git log 
    //查看提交歷史,以便肯定要回退到哪一個版本
    git log --pretty=oneline --abbrev-commit
    //僅僅顯示版本號和提交說明 --pretty=oneline表示將提交歷史放在一行顯示 --abbrev-commit在於縮短commit id。
    git log --pretty=format:"%h - %an, %ar: %s" 
    //定製化要顯示的記錄格式

    git log --graph --pretty=oneline --abbrev-commit 
    //以圖的形式展現提交信息合合並信息
2、將當前版本回退到上一個版本
    git reset --hard HEAD^ //HEAD指向當前版本
3、回退到指定版本
    git reset --hard 1092a //1092a表示版本號的前幾位
    git reset HEAD "文件" //把暫存區的修改撤銷掉
4、查看記錄的每一次命令
    git reflog //查看命令歷史,以便要回到將來的哪一個版本
5、查看最近幾回提交的內容差別
    git log - p -n
    //-p表示按補丁格式顯示每一個更新之間的差別
6、查看每次提交的簡略的統計信息
    git log --stat
7、限制輸出長度
    git log --since=2.weeks
    //查看最近兩週的提交
    git log --pretty="%h - %s" --author=tangjie-93 --since="2008-10-01"
    //查看指定做者指定時間段的提交
8、按指定關鍵字進行篩選
    git log -Sgit
    //按git關鍵字篩選提交的內容
9、查看最後一次的提交記錄
    git log -1
10、查看提交歷史、各個分支的指向以及項目的分支分叉狀況
    git log --oneline --decorate --graph --all
11、查看某個文件的修改記錄
    git blame 文件名 -L//參數L來檢查須要修改的某幾行。
12、查看以前提交的內容
    git show commitId
    
複製代碼

一、下圖是--pretty=format經常使用選項
vue

二、下面是git log的經常使用選項
java

三、下圖是限制git log輸出的選項
git

五、工做區和暫存區

  • 工做區: 在電腦裏能看到的目錄,如vue文件夾就是一個工做區。
  • 版本庫: 工做區的隱藏目錄.git。
  • 暫存區: 版本庫中存放的stage(或者叫index)的區域,以及Git爲咱們自動建立的第一個分支(master),以及指向master的一個指針HEAD。
1、將工做區的文件添加到暫存區
    git add "文件或者目錄" 
    //其實是把工做區的文件添加到暫存區;或者跟蹤(track)新添加的文件;同時還能用於合併時將有衝突的文件標記爲已解決狀態。該命令可被理解爲"添加內容到下一次提交中"
    注意: 執行git add的文件,還沒執行git commit的文件,再次被修改後,須要從新執行git add命令才行。
    git commit -m "描述" 
    //把暫存區的全部內容提交到當前分支。
    //注意:提交記錄的是放在暫存區的快照。
2、 將暫存區的文件提交到當前分支
    git commit -a -m "描述" 
    //把已經跟蹤過的文件暫存起來一塊兒提交。
    git commit --amend
    //用於修改提交內容
3、查看工做區文件的當前狀態
    git status //查看工做區的當前狀態
    git status -s 或者 git status --short//將當前工做區的轉態信息簡化
4、查看工做區文件和暫存區文件的差別(查看未暫存文件的修改)
    git diff //比較當前工做目錄中當前文件和暫存區文件之間的差別。
5、查看暫存區文件和當前分支文件的區別(查看已暫存的文的修改)
    git diff --cached git diff --staged  //查看提交到暫存區但還沒提交到分支的內容。也就是比較暫存區和倉庫分支裏的區別。 
6、查看工做區文件和當前分支最新版本文件的區別
    git diff HEAD -- "文件" //查看工做區和版本庫裏最新版本的某個文件的區別

複製代碼

六、撤銷修改

1、將文件在工做區的修改全撤銷
    git checkout -- "文件" 
    //把文件在工做區的修改全撤銷。總之就是讓這個文件回到最近一次git commit或 git add的狀態。分兩種狀況討論:
    //狀況1,文件自修改後尚未放到暫存區,撤銷修改後就回到和版本庫同樣的狀態。若是此時你想把剛剛撤銷的內容復原的話,若是此時的編輯器還沒關掉的話,使用撤銷"CTRL+Z"能夠回到撤銷以前的狀態。
    //狀況2,文件已經添加到暫存區,如今又作了修改,撤銷修改就回到添加到暫存區後的狀態。

    git checkout -- "文件" 中的--很重要,沒有--,就變成了`切換到另外一個分支`的命令。
2、將暫存區的修改撤銷掉,就是撤銷執行了add命令尚未執行commit命令的文件
    git reset HEAD "文件" 
    //將暫存區的修改撤銷掉。使得工做區中文件與當前分支文件同樣。
複製代碼

七、刪除文件

1、將文件從暫存區中刪除,分爲如下兩步。先刪除,再提交
    git rm "文件" //從暫存區中刪除該文件,而且會連帶從工做目錄中刪除指定的文件
    git commit -m "delete file" //

    git checkout -- "文件" //用版本庫裏的文件替換工做區的版本,不管是修改仍是刪除。
2、若是刪除以前修改過而且已經放到暫存區的話,就必須用強制刪除選項-f 。用於防止誤刪尚未添加到快照區域的數據。
    git rm  -f "文件" 
3、刪除git倉庫中的數據,但文件仍然保留在磁盤中。
    git rm --cached "文件"

複製代碼

八、分支管理

一、建立和合並github

  每次提交,Git都把它們串成一條時間線,該時間線就是分支。master稱爲主分支,master(分支)是指向提交對象的可變指針,HEAD指向的是當前分支。每次像maste分支r提交,master分支都會向前移動一步,提交的越多,master分支的線就愈來愈長。   當咱們建立新的分支dev時,把HEAD指向當前分支dev。此時對工做區的修改和提交就是針對dev分支了,提交一次,dev分支的指針就向前移動一步,而master指針不變。。
服務器

1、建立分支
    git checkout -b dev 或者 git switch -c dev
    //至關於下面的兩條執行語句
    git branch dev //建立分支
    git checkout dev //切換回當分支
2、查看當前分支
    git branch //會列出當前全部分支,且當前分支會標記一個`*`號
    git branch -a //查看本地和遠程倉庫的全部分支
3、切換分支
    git checkout dev或者 git switch dev
4、合併分支
    git merge dev //合併某分支到當前分支
5、刪除分支
    git branch -d dev
6、強行刪除分支
    git branch -D dev
7、建立遠程分支到本地
    git checkout -b dev origin/dev
9、將本地分支推送到遠程並在遠程建立相同的分支
    git push origin dev:dev
10、刪除遠程分支
    git push origin :dev //origin 是遠程倉庫的默認名稱
11、查看每一個分支的最後一次提交
    git branch -v
12、查看已經合併到當前分支的分支
    git branch --merged

13、查看還沒有合併到當前分支的分支
    git branch --no-merged
複製代碼

  建立當前分支(以下圖所示)app

  在當前當前分支提交,時間線的變化(以下圖所示)編輯器

二、解決衝突分佈式

git log --graph --pretty=oneline //查看分支的合併狀況

1、切換到dev分支,修個文件
    vi test.md
    git add test.md
    git commit -m "modify test.md"
    git switch master
    git merge dev//合併分支,衝突了
2、解決衝突
    vi test.md
    git add "test.md"
    git commit -m "modify .test.md" //此時自動合併了,此時當前分支上的數據是最新的,若是想在其餘分支上也更新數據,能夠在其餘分支上git merge "其餘分支"使得數據最新

3、一般在合併分支時,Git默認採用的是`Fast Forwar`模式,可是在這種模式下,刪除分支後,會丟掉分支信息。
    git merge --no-ff -m "merge with no-ff" dev //表示禁用Fast Formard的方式,`的模式會記錄分支歷史。 -m 是由於本次合併會建立一個新的提交。`no-ff
複製代碼

三、bug分支   fetch

git stash 
    //將當前工做現場存起來,暫存無法提交的工做現場
    git stash list 
    //查看存儲的列表
    git stash apply stash@{0} 
    //恢復指定的stash,可是stash的內容並無刪除
    git stash drop 
    //刪除stash
    git stash pop 
    //恢復stash的同時也把stash刪除了
    git cherry-pick commitid 
    //複製一個特定的提交到當前分支
    git checkout -b branch-name origin/branch-name 
    //在本地建立和遠程分支對應的分支,名稱最好同樣
    git branch --set-upstream branch-name origin/branch-name
    //創建本地分支和遠程分支的關聯
    git rebase 
    //將本來分叉的提交歷史變成一條直線。本質上就是把本地未push的分叉提交歷史整理成直線。 使得咱們在看歷史提交的變化更容易些。其實就是把咱們本地的提交放到了別人提交以後了。不足的是本地的分支提交已經被修改過了。
複製代碼

九、標籤管理

  標籤是版本庫的快照,是指向某個commit的指針。目的在於可讓人們更快的記住。

1、建立標籤
    git tag "標籤名" //默認是對最新的commit 設置標籤
    git tag "標籤名" commitid //對特定commit設置標籤
2、後期打標籤
    git tag -a <tagname> -m "blablabla..." commitid 
    //指定標籤信息 commitid表示版本id
2、查看全部標籤
    git tag
    
    git show "標籤名"
    //查看該標籤的詳細信息
3、附註標籤
    git tag -a <tagname> -m "blablabla..."
    //-a表示指定標籤名 -m表示指定說明文字
4、刪除標籤
    git tag -d "標籤名"
    tit push origin :refs/tags/"標籤名"//能夠刪除一個遠程標籤
5、推送標籤
    git push origin "標籤名" 
    //推送一個本地標籤到遠程倉庫
    git push origin --tags 
    //推送所有未推送過的本地標籤到遠程
複製代碼
相關文章
相關標籤/搜索