Git專題
學習筆記| git深入淺出 Part1_快速操作指南
學習筆記| git深入淺出 Part2_Git基礎
基礎認知
Git 有三種狀態,文件可能處於其中之一:
- 已提交(committed)
表示數據已經安全的保存在本地數據庫中 - 已修改(modified)
表示修改了文件,但還沒保存到數據庫中 - 已暫存(staged)
表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中
由此引入 Git 項目的三個工作區域的概念:
- Git 倉庫(Repository)
Git 倉庫目錄是 Git 用來保存項目的元數據和對象數據庫的地方。這是 Git 中最重要的部分,從其它計算機克隆倉庫時,拷貝的就是這裏的數據。 - 暫存區域(Staging Area)
暫存區域是一個文件,保存了下次將提交的文件列表信息,一般在 Git 倉庫目錄中。有時候也被稱作“索引”,不過一般說法還是叫做暫存區域。 - 工作目錄(Working Directory)
工作目錄是對項目的某個版本獨立提取出來的內容。這些從 Git 倉庫的壓縮數據庫中提取出來的文件,放在磁盤上供你使用或是修改。
基本的 Git 工作流程
- 在工作目錄中修改文件
- 暫存文件,將文件的快照放入暫存區域
- 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄
基本的 提交流程
git add .
git commit -m 'your message'
git push -r
git push
命令解析
提交刪除文件
git commit -a
跳過使用暫存區域,把所有已經跟蹤過的文件暫存起來一併提交,從而跳過git add
步驟git rm
從Git中移除某個文件,並從工作目錄中刪除指定文件[⚠️注意]git rm --cached FILENAME
從Git中移除某個文件,但保留在當前工作目錄中git rm log/\*.log
此命令刪除log/
目錄下擴展名爲.log
的所有文件git rm \*~
此命令刪除所有以~
結尾的所有文件git mv FILE_FROM FILE_TO
對文件改名,事實上運行git mv
就相當於運行了下面三條命令:
mv FILEA FILEB
git rm FILEA
git add FILEB
查看提交歷史
git log
按提交時間列出所有的更新,最近的更新排在最上面git log -p [num]
列出所有的更新,並顯示每次提交的內容差異,加入參數num
則僅顯示最近的 num 次提交git log --stat
列出所有的更新,並顯示每次commit的變化以及簡略的統計信息,如所有被修改過的文件/有多少文件被修改了以及被修改過的文件的哪些行被移除或是添加了,在每次提交的最後還有一個總結。git log --pretty=[param]
可以指定使用不同於默認格式的方式展示提交歷史。
1. oneline 將每個提交放在一行顯示,查看提交數很大時非常有用
2. short
3. full
4. fuller
5. format 可以定製要顯示的記錄格式
上面只是簡單介紹了一些 git log
命令支持的選項,更多可以參考 git log
的 常用選項,介紹了它們是如何影響log命令的輸出的。
撤銷操作
git commit --amend
提交暫存區中的文件,例如在漏掉幾個文件沒有添加或提交信息寫錯了時,可以運行帶有--amend
選項的提交命令嘗試重新提交。最終只會有一個提交,第二次提交將代替第一次提交的結果。git reset HEAD <file>
取消暫存的文件,將暫存區的文件撤回git checkout -- <file>
撤銷對文件的修改,將文件還原成上次提交時的樣子(或剛克隆完的樣子,或剛把它放入工作目錄時的樣子)
遠程倉庫的使用
git remote -v
列出所有遠程倉庫,以及需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URLgit remote add <shortname> <url>
添加一個新的遠程 Git 倉庫,同時指定一個你可以輕鬆引用的簡寫git fetch <shortname>
可以在命令行中使用上述字符串<shortname>
來代替整個 URL 拉取倉庫中有但你沒有的信息。要注意的是,git fetch
命令會將數據拉取到你的本地倉庫,但它不會自動合併或修改你的當前工作,當準備好時必須手動將其合併入你的工作。git pull
將 master 分支推送到 origin 服務器git remote show [remote-name]
查看某一個遠程倉庫的更多信息git remote rename [a] [b]
重命名遠程倉庫的簡寫名git remote rm [a]
移除一個遠程倉庫
打標籤
Git 使用兩種主要類型的標籤:輕量標籤(lightweight)與附註標籤(annotated)。
一個輕量標籤很像一個不會改變的分支 - 它只是一個特定提交的引用。
然而,附註標籤是存儲在 Git 數據庫中的一個完整對象。 它們是可以被校驗的;其中包含打標籤者的名字、電子郵件地址、日期時間;還有一個標籤信息;並且可以使用 GNU Privacy Guard (GPG)簽名與驗證。 通常建議創建附註標籤,這樣你可以擁有以上所有信息;但是如果你只是想用一個臨時的標籤,或者因爲某些原因不想要保存那些信息,輕量標籤也是可用的。
git tag
在 Git 中列出所有已有的標籤git tag -a <versiontag> -m <yourmessage>
在 Git 中創建一個附註標籤,-m
選項指定了一條將會存儲在標籤中的信息。 如果沒有爲附註標籤指定一條信息,Git 會運行編輯器要求你輸入信息git show <versiontag>
可以看到標籤信息與對應的提交信息,輸出顯示打標籤者的信息、打標籤的日期時間、附註信息,和具體的提交信息git tag <versiontag>
使用輕量標籤 ,輕量標籤本質上是將提交校驗和存儲到一個文件中,沒有保存任何其他信息。創建輕量標籤不需要使用各種選項,只需要提供標籤名git push origin [tagname]
顯示地推送標籤到共享服務器上,默認情況,git push
命令並不會傳送標籤到遠程倉庫服務器上git push origin --tags
把所有不在遠程倉庫服務器上的標籤全部傳送到那裏,這樣其他人從倉庫中 clone 或者拉取,它們也能得到你的那些標籤git tag -d <versiontag>
刪除本地倉庫上的標籤,但這個命令並不會從任何遠程倉庫中移除這個標籤,必須使用git push <remote> :refs/tags/<tagname>
來更新你的遠程倉庫