天天看點

Git基礎入門(四)Git基本操作2

忽略檔案:

    在實際開發過程中總有些檔案無需納入Git的管理,比如日志檔案、臨時檔案等

    在這種情況下,我們可以在工作目錄中建立一個名為.gitignore的檔案,列出要忽略的檔案名或者表達式 

    例:cat .gitignore

        *.[oa]

        *~

        *.log

    第一行告訴Git忽略所有以.o或.a結尾的檔案

    第二行告訴Git忽略所有以 ~ 結尾的檔案

    第三行告訴Git忽略所有以.log結尾的檔案

    要養成一開始就設定好.gitignore檔案的習慣,以免将來誤送出這類無用的檔案

    .gitignore的格式規範:

        所有空行或者以#開頭的行都會被Git忽略

        可以使用标準的glob模式比對

        比對模式可以以(/)開頭防止遞歸

        比對模式可以以(/)結尾指定目錄

        要忽略指定模式以外的檔案或目錄,可以在模式前加上驚歎号(!)取反

glob模式指shell指令行所使用的統配符

    *:比對零個或多個任意字元

    ?:比對任意一個字元

    **:表示比對任意中間目錄,比如'a/**/z',可以比對 a/z,a/b/z 或'a/b/c/z'等

    [abc]:比對任何一個列在方括号中的字元;

    [0-9]:比對0到9的數字

    [a-z]:比對a到z的字母

    [A-Z]:比對A到Z的字母

.gitignore例子:

    # no .a files

    *.a

    # but do track lib.a, even though you're ignoring .a files above

    !lib.a

    # only ignore the TODO file in the current directory, not subdir/TODO

    /TODO

    # ignore all files in the build/ directory

    build/

    # ignore doc/notes.txt, but not doc/server/arch.txt

    doc/*.txt

    # ignore all .pdf files in the doc/ directory

    doc/**/*.pdf

GitHub上有一個十分詳細的針對數十種項目及語言的.gitignore檔案清單

位址:https://github.com/github/gitignore

git diff檢視具體修改的内容   

    echo "/usr/bin/python" > test.py                        #修改檔案

    git diff                                                #比較目前檔案和快照中檔案的差異

        diff --git a/test.py b/test.py                      #産生差異的檔案

        index df2203b..d5aba22 100644

        --- a/test.py

        +++ b/test.py

        @@ -1 +1 @@ 

        -coding:utf-8                                       #"-"表示删除的行

        +/usr/bin/python                                    #"+"表示新增的行

git diff --cached(或--staged)檢視已暫存的下次送出裡的内容:

    git add test.py                                     #将檔案添加到暫存區     

    git diff                                            #這時使用git diff将什麼也不會輸出,應為檔案已經放入暫存區

    git diff --cached                                   #檢視暫存區的檔案差異

        diff --git a/test.py b/test.py

        @@ -1 +1 @@

        -coding:utf-8

        +/usr/bin/python

git difftool                #打開一個文本編輯器顯示檔案差異(适合檔案少時使用,較為直覺)

送出更新

    在送出之前,請一定要确認還有什麼修改過的或建立的檔案還沒有git add過,否則送出的時候不會記錄這些還沒暫存起來的變化

    每次準備送出前,先用git status看下,是不是都已暫存起來了,然後再運作git commit送出

    git commit會啟動一個預設文本編輯器以便輸入本次送出的說明(使用git config --global core.editor='vim'設定預設的編輯器)

    編輯器會顯示類似下面的資訊:

        # Please enter the commit message for your changes. Lines starting

        # with '#' will be ignored, and an empty message aborts the commit.

        # On branch master

        # Changes to be committed:

        #       modified:   test.py

    #開頭的為注釋資訊不會送出到git倉庫中

    如果想要更詳細資訊,可以用-v選項,這會将你所做的改變的diff輸出放到編輯器

    退出編輯器時,Git會丢掉注釋行,用你輸入送出附帶資訊生成一次送出

    git commit -m "version-6"               #直接在指令行輸入說明資訊

        [master 3687f51] version-6                              #送出後輸出的資訊(master分支名稱,3687f51校驗和,version-6 注釋資訊)

        1 file changed, 1 insertion(+), 1 deletion(-)

    送出時記錄的是放在暫存區域的快照,任何還未暫存的仍然保持已修改狀态

    每一次運作送出操作,都是對項目作一次快照,以後可以回到這個狀态,或者進行比較

跳過使用暫存區域

    使用git commit -a時Git會自動把所有已經跟蹤過的檔案暫存起來一并送出,進而跳過git add步驟,但不會把未跟蹤的檔案暫存

移除檔案

    git rm              #從已跟蹤的檔案清單中删除,并連帶從工作目錄中删除指定的檔案

    git rm指令後面可以列出檔案或者目錄的名字,也可以使用glob模式

    如果使用shell指令rm删除檔案,需要再運作git rm記錄此次移除檔案的操作

    如果删除之前修改過并且已添加到暫存區域,則必須-f強制删除,這是一種安全特性,用于防止誤删還沒有添加到快照的資料,這樣的資料不能被Git恢複

如果想把檔案從Git倉庫中删除,但仍然希望保留在目前工作目錄中。(想讓檔案保留在磁盤,但是并不想讓 Git 繼續跟蹤)

git rm --cached <file>                #從git倉庫中删除檔案或目錄

例:

    git rm --cached test.py 

        rm 'test.py'

    git status

        On branch master

        Changes to be committed:

          (use "git reset HEAD <file>..." to unstage)

        deleted:    test.py

        Untracked files:

          (use "git add <file>..." to include in what will be committed)

        test.py                     #從git

    ls

        test.py

移動檔案或改名

    git mv <file-from>  <file-to>

    git mv相當于下面三條指令的結合:

        mv README.md README

        git rm README.md

        git add README

本文轉自  紅塵世間  51CTO部落格,原文連結:http://blog.51cto.com/hongchen99/1975991