Git本地倉庫基本操作-1


 

獲取Git倉庫

  • 從Github服務器上克隆已經存在的倉庫
    首先打開Git的命令行窗口,找一個位置創建一個新文件夾,用來存放從github上克隆的項目:
    cmd創建新文件夾.png
    打開github官網登入個人帳戶,選擇一個要克隆的項目,並復制其url:
    克隆Github項目.png
    執行git clone 命令:
    執行克隆命令.png
    因為這是個空的倉庫所以克隆完成后給出了警告,命令執行完成后文件夾中就有了一下內容:
    克隆結果.png

    開可以通過SSH鏈接來從Github服務器上克隆,后續在介紹

  • 從本地已經存在的目錄中創建Git倉庫
    例如:現在我的電腦上有這樣一個文件夾
    本地目錄建立Git倉庫.png
    現在我要對這個目錄中的內容進行管理,那么我們先打開Git命令行,並切換到該目錄,然后使用git init命令建立一個Git倉庫:
    運行·git_init后.png

    現在要了解Git中文件的兩種狀態:已跟蹤和未跟蹤

    • 未跟蹤:指的是未被納入到版本控制的文件,它們既不存在於之前的快照記錄中,也沒有放入暫存區,例如從本地建立的Git倉庫
      在開始的時候目錄下的所有文件都是未被跟蹤的
      例如:在上面執行完git init命令后,在接着執行git status命令來查看目錄下的文件狀態:
      建立git倉庫后查看文件狀態.png
      顯示了當前目錄下未被追蹤的文件

    • 已跟蹤:已經納入版本管理的文件,在之前的快照中有它們的記錄,在一段時間后它們的狀態可能是未修改,或者已修改,或者已經暫存,
      對於從Github上克隆下來的項目,其狀態都是已經提交且未修改狀態
      現在使用git add 命令來跟蹤目錄下的所有文件:
      追蹤文件.png
      可以看出之前未被追蹤的文件都已經被追蹤,這些文件目前的狀態是已暫存
      這里在git add 命令后面使用--all參數追蹤當前目錄下所有的文件,還可以使用git add filepath 的方式將某個路徑下的文件夾納入追蹤,
      如果想只追蹤以某個文件后綴結尾的所有文件,那么可以使用*.xx參數,例如我要追蹤所有以.c結尾的文件,則使用git add *.c即可將所有以.c
      結尾的文件納入追蹤,現在講這些已追蹤的文件使用git commit 命令進行提交:
      GitCommit.png
      因為我將文本編輯器設置為Notepad++,所以執行git commit命令后Notepad++就被啟動了,等待我輸入提交信息,輸入完成后關閉Notepad++即可。
      來看看提交后的目錄下的工作狀態:
      提交后.png
      其實還可以使用git commit -m "伴隨提交的信息",這樣可以把要提交的信息追加到命令尾部,無需打開文本編輯器
      現在再來嘗試修改一項目中的某個文件,並使用git status命令查看修改后文件狀態:
      修改已經提交的文件.png
      現在在使用git commit命令進行一次提交,然后查看狀態:
      提交已經修改的文件.png
      可以發現git commit命令執行完成后並沒有什么卵用,被修改的文件還是處於已修改狀態,因為git commit命令執行時提交的
      是上一次執行git add命令后暫存的版本,也就是文件修改之前的版本,所以對於已經修改的文件,還是要使用git add命令來將
      其暫存:
      修改后在addcommit.png

    通過上面的實驗可以總結出如下的文件狀態變化流程:
    文件狀態的變化.png

忽略文件

有些文件我們不想納入版本控制中,例如:一些存放敏感信息的文件,一些編譯的中間產物等等..,但是每次執行git status命令時又會有未追蹤文件的提示,
對於有強迫症的同學,實在是難以忍受,那么可以在與.git文件夾平級的文件夾中建立一個無名的后綴名為.gitignore的文件,在這個文件中寫入要忽略的
文件后綴,例如:*.txt就是忽略所有以txt后綴的文件;在Windows系統中要注意是,在資源管理器中無法新建一個無名的文件,但是我們可以先建一個文件,
然后使用文本編輯器打開,然后另存為的時候不要給名稱,只給.gitignore后綴即可
例如:將txt文件排除在外,將一個名為ttt的文件排除在外
gitignore.png

分別對這兩個文件執行add命令:
編寫ignore后add.png

可以發現這兩個文件受.gitignore文件中的忽略規則限制無法暫存,使用git status命令查看時不在提示未追蹤,通過上圖報錯提示可以看出,如果想把
受限制的這兩個文件添加到暫存,可以在add命令中使用-f參數,強行add即可;

github上還有一個gitignore列表,已經編寫好了各種語言和IDE中應該忽略的文件:https://github.com/github/gitignore
關於.gitignore文件的編寫規則,請參考Pro Git 的2.2節

查看已暫存和未暫存的修改之間的差異

  • 查看目錄中已經修改的文件和上次暫存文件的差異(git diff)
    在目錄中新建一個文本文件,內容如下:
    新建文檔.png
    執行git add -all后在執行git commit,然后在修改改文本文件,向其中追加內容:
    firstcommit.png
    現在向文本文件中追加內容:
    追加的內容.png
    在執行git diff命令:
    gitdiff.png
    通過git diff命令可以看出目錄中被修改過的文件與上次暫存文件的區別

  • 查看已緩存的文件和上次所提交文件的差異(git diff --cached/--staged)
    接着上面的例子,現在使用git add 命令將修改過的文件添加到緩存中:
    緩存已修改.png

    現在使用git diff --cached命令查看緩存文件與上次提交文件的差異:
    gitdiffcached.png

  • 查看上次提交的文件和目錄中被修改過文件的差異(git diff HEAD)
    接着上例,執行git diff HEAD命令:
    gitdiffHead.png

跳過暫存區域直接提交所有文件

前面的例子中我們都是先使用git add命令先進行暫存,然后在使用git commit進行提交,也可以使用git commit命令加上-a選項,
可以直接跳過暫存將所有已經追蹤過的文件暫存起來並提交.
例如:
gitcommitall.png

考慮到特殊情況,如果文件修改后被緩存但是並未被提交,此時目錄中的文件又被修改,那么此時執行git commit -a命令后,
這次提交的快照的內容如目錄中被修改的文件保持一致:
commitspecialcase.png

修改上一次的提交

git commit --amend

這個命令將會把暫存區中的文件再次提交,如果上一次提交后暫存區中的內容沒有變化,那么這次提交只修改提交的信息,
如果暫存區發生了變化,例如我們修改了文件,並將其添加到了暫存區,此時使用該命令,會將暫存區的文件提交,帶有--amend
參數的commit命令只修改上一次的提交,不生成新的提交記錄。
例:暫存區未發生變化,執行git commit --amend
gitcommitamend.png
共做了兩次提交,由於第一次提交后暫存區沒有發生變化,所以第二次提交只修改了提交信息,雖然兩次提交,但是只有一次
提交記錄。

例:暫存區發生了變化,執行git commit --amend
我先修改文件,然后將其暫存,然后在執行git commit --amend:
gitcommitamendmodified.png
提交后查看提交記錄,只有一條提交記錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM