Pro Git --- 讀書筆記 (Chaptero2)
阿新 • • 發佈:2022-05-22
獲取Git倉庫
- 初始化
git init
- 有一個尚未進行版本控制的目錄,可以初始化一個倉庫,初始化後,目錄內的檔案還沒被跟蹤
- 克隆
git clone <url>
- 預設配置下遠端Git倉庫中的每一個檔案的每一個版本都將被拉取下來
- 這會在當前目錄下建立一個目標目錄,然後初始化一個.git目錄,從遠端倉庫中拉取所有的資料放入.git中,然後從中讀取最新版本的檔案拷貝。
記錄那次更新到倉庫
- 工作目錄下的檔案不外乎兩種狀態:已跟蹤或未跟蹤
- 已跟蹤的檔案是指被納入了版本控制的檔案,在上一次快照中有它們的記錄,工作一段時間後,它們的狀態可能是未修改、已修改或放入暫存區。
- 未跟蹤的檔案,既不存在與上一次的快照中,也不存在暫存區中
檢查當前檔案狀態
git status
- 用於檢查哪些檔案處於什麼狀態
跟蹤新檔案/暫存已修改檔案
git add <file>
- 開始跟蹤某一個檔案
- 如果是一個目錄名,將會遞迴地跟蹤該目錄下的所有檔案
- 將已跟蹤發生修改後還沒放入暫存區的檔案,暫存這次更新
- 將命令理解為“精確地將內容新增到下一次提交中”
- 提交時,提交的版本是當前檔案執行
add
命令時的版本,而不是執行提交時的檔案當前版本,所以在add
之後又修改了檔案,需要重新執行add
將最新版本暫存
忽略檔案
檔案.gitignore的格式規範:
- 所有空行或者#開頭的行都會被Git忽略
- 可以使用標準的glob模式,會遞迴地應用在整個工作區
- 匹配模式可以以(/)開頭防止遞迴
- 匹配模式可以以(/)結尾指定目錄
- 要忽略指定模式之外的檔案或目錄,可以在模式之前加上(!)取反
檢視差異
git diff
- 比較的是工作目錄中當前檔案和暫存區的快照的差異
git diff --staged
- 比較的是已暫存的和已提交的差異
提交更新
- 提交時記錄的放在暫存區的快照,任何還沒暫存檔案的仍然保持已修改狀態,可以在下一次提交時納入版本管理
git commit -a
- 跳過使用暫存區,將所有已經跟蹤的檔案暫存並提交
移除檔案
git rm
- 從已跟蹤的檔案清單中刪除(從暫存區中移除),並連帶從工作目錄中刪除指定的檔案,這樣以後就不會出現在未跟蹤檔案中
git rm --cached
- 希望從暫存區中移除,但是希望仍然保留在工作目錄中
檢視提交歷史
git log
- 會按照提交的時間排列,預設按照時間最新提交的排列
git log -p
- 會顯示提交的差異
撤銷操作
git commit --amend
- 提交後發現漏了幾個檔案沒有提交,或者提交資訊錯誤,可以帶上這個選項重新提交
取消暫存的檔案
git reset HEAD <file>
- 可以將已修改暫存的檔案,取消暫存
撤銷對檔案的修改
git checkout -- <file>
-
對這個檔案的任何本地修改都會消失,Git會用最近提交的版本覆蓋它
-
記住,在Git中任何已提交的東西幾乎都是可以恢復的
遠端倉庫的使用
檢視遠端倉庫
git remote
- 會列出指定的每一個遠端伺服器的簡寫
git remote -v
- 會顯示遠端倉庫使用的Git儲存的簡寫與其對應的URL
新增遠端倉庫
git remote add <shortname> <url>
- 新增一個遠端倉庫,同時指定一個簡寫
從遠端倉庫中抓取或拉取
git fetch <remote>
-
訪問遠端倉庫,從中拉取所有本地還沒有的檔案,執行之後,將會擁有那個遠端倉庫中所有分支的引用
-
注意,這個命令只會將資料下載到本地,並不會自動合併或修改當前的工作
git pull
- 如果當前分支設定了跟蹤遠端分支,可以用這個命令,會自動抓取後合併該遠端分支到當前分支
推送到遠端倉庫
git push <remote> <branch>
- 推送專案到上游
檢視遠端倉庫
git remote show <remote>
- 檢視到某個遠端倉庫的具體資訊
遠端倉庫的重新命名和移除
git remote rename <old> <new>
- 重新命名
git remote remove <remote>
- 所有和這個遠端倉庫相關的遠端跟蹤分支以及配置資訊都會一起被刪除
打標籤
- 給倉庫歷史的某一次提交打上標籤
列出標籤
git tag
git tag -l "v1.8.5*"
- 匹配標籤名
建立標籤
-
輕量標籤,很像一個不會改變的分支,它只是某個特定提交的引用
-
附註標籤,是在Git資料庫中一個完整的物件,會包含打標籤者的名字、電子郵件地址、日期時間和一個標籤資訊
git tag -a <tagname> -m <message>
- 建立附註標籤
git show <tag>
- 顯示標籤資訊和對應的提交資訊
git tag <tagname>
- 建立輕量標籤
git tag -a <tagname> <commit>
- 對歷史提交打標籤
git push <remote> <tagname>
- 標籤預設不會推送到遠端倉庫,需要顯示推送
git push <remote> --tags
- 會將遠端倉庫中沒有的標籤全部推送到遠端倉庫
git tag -d <tagname>
- 刪除標籤
git push <remote> --delete <tagname>
- 刪除遠端倉庫的標籤