Git基础(常用命令)介绍
版本控制是一種記錄若干文件內容變化,以便將來查閱特定版本修訂情況的系統.
關于版本控制分為三種:本地版本控制系統,如rcs;集中化的版本控制系統,如CVS、SVN;分布式版本控制系統,如Git。
Git基礎要點
Git和其它版本控制系統的主要差別在于:Git只關心文件數據的整體是否發生變化,而大多數其它系統則只關心文件內容的具體差異。
對于任何一個文件,在Git內都只有三種狀態:已提交(committed)、已修改(modified)和已暫存(staged)。已提交表示該文件已經被安全地保存在本地數據庫中了;已修改表示修改了某個文件,但還沒有提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中。
每個項目都有一個git目錄,它是Git用來保存元數據和對象數據庫的地方。該目錄非常重要,每次克隆鏡像倉庫的時候,實際拷貝的就是這個目錄里面的數據。
所謂的暫存區域只不過是個簡單的文件,一般都放在git目錄中。有時候人們會把這個文件叫做索引文件。
基本的Git工作流程:(1)、在工作目錄中修改某些文件;(2)、對這些修改了的文件作快照,并保存到暫存區域;(3)、提交更新,將保存在暫存區域的文件快照轉儲到git目錄中。
對于已安裝的Git,第一個要配置的是你個人的用戶名稱和電子郵件地址。這兩條配置很重要,每次Git提交時都會引用這兩條信息,說明是誰提交了更新,所以會隨更新內容一起被永久納入歷史記錄:
$ git config --global user.name "Spring"
$ git config --global user.email Spring@163.com
如果用了--global選項,那么更改的配置文件就是位于你用戶主目錄的那個,以后你所有的項目都會默認使用這里配置的用戶信息。如果要在某個特定的項目中使用其他名字或者電郵,只要去掉--global選項重新配置即可,新的設定保存在當前項目的./git/config文件里。
Git常用命令
有兩種取得Git項目倉庫的方法。
第一種是在現存的目錄下,通過導入所有文件來創建新的Git倉庫:(1)、從當前目錄初始化:$ git init ,初始化后,在當前目錄下會出現一個名為.git的目錄,所有Git需要的數據和資源都存放在這個目錄中;(2)、如果當前目錄下有幾個文件想要納入版本控制,需要先用git add命令告訴Git開始對這些文件進行跟蹤,然后提交:
$ git add README
$ git commit -m 'initial project version'
其中README文件是已經存在在當前目錄中的。git add后可以接要跟蹤的文件或目錄的路徑。如果是目錄的話,就說明要遞歸跟蹤所有該目錄下的文件。
第二種是從已有的Git倉庫克隆出一個新的鏡像倉庫來,如:
$ git clone git://github.com/schacon/grit.git
如果希望在克隆的時候,自己定義要新建的項目目錄名稱,可以在上面的命令最后指定:
$ git clone git://github.com/schacon/grit.git mygrit
唯一的差別就是,現在新建的目錄成了mygrit,其它的都和上邊的一樣。
工作目錄下面的所有文件都不外乎兩種狀態:已跟蹤或未跟蹤。已跟蹤的文件是指本來就被納入版本控制管理的文件,在上次快照中有它們的記錄,工作一段時間后,它們的狀態可能是未更新,已修改或者已放入暫存區。而所有其他文件都屬于未跟蹤文件。
檢查當前文件狀態:
$ git status
忽略某些文件:可以創建一個名為.gitignore的文件,列出要忽略的文件模式。
要查看尚未暫存的文件更新了哪些部分 ,不加參數直接輸入:
$ git diff
單單git diff不過是顯示還沒有暫存起來的改動,而不是這次工作和上次提交之間的差異。
如要看已經暫存起來的文件和上次提交時的快照之間的差異,可以用:
$ git diff --cached
每次準備提交前,先用git status看下,是不是都已經暫存起來了,然后在運行提交命令:
$ git commit
這種方式會啟動文本編輯器以便輸入本次提交的說明,也可以使用-m參數后跟提交說明的方式:
$ git commit -m "commit message"
提交時記錄的是放在暫存區域的快照,任何還未暫存的仍然保持已修改狀態,可以在下次提交時納入版本管理。每一次運行提交操作,都是對你項目作一次快照,以后可以回到這個狀態,或者進行比較。
提交更新:現在的暫存區域已經準備妥當可以提交了。在此之前,請一定要確認還有什么修改過的或新建的文件還沒有git ?add 過,否則提交的時候不會記錄這些還沒暫存起來的變化。所以,每次準備提交前,先用git ?status 看下,是不是都已暫存起來了,然后再運行提交命令git ?commit。
跳過使用暫存區域:只要在提交的時候,給git ?commit加上-a選項,Git就會自動把所有已經跟蹤過的文件暫存起來一并提交,從而跳過git ?add步驟。
移除文件:要從Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),然后提交。可以用git? rm 命令完成此項工作,并連帶從工作目錄中刪除指定的文件,這樣以后就不會出現在未跟蹤文件清單中了:
$ git rm README
如果刪除之前修改過并且已經放到暫存區域的話,則必須要用強制刪除選項”-f”,以防誤刪除文件后丟失修改的內容。
移動文件:要在Git中對文件改名:
$ git mv file_from file_to
其實,運行git ?mv就相當于運行了下面三條命令:
$ mv file_from file_to
$ git rm file_from
$ git add file_to
查看提交歷史:可以使用
$ git log
默認不用任何參數的話,git ?log會按提交時間列出所有的更新,最近的更新排在最上面。
常用”-p”選項展開顯示每次提交的內容差異,用-2則僅顯示最近的兩次更新。”--stat”僅顯示簡要的增改行數統計。”--pretty”選項,可以指定使用完全不同于默認格式的方式展開提交歷史,比如用online將每個提交放在一行顯示:
$ git log --pretty=oneline
另外還有short、full、fuller和format可以用
git log --pretty=format:"%h - %an, %ar : %s"
下面列出一些其它常用的選項及其釋義:
???????? “-p”:按補丁格式顯示每個更新之間的差異。
“--stat”: 顯示每次更新的文件修改統計信息。
“--shortstat”: 只顯示--stat 中最后的行數修改添加移除統計。
“--name-only”: 僅在提交信息后顯示已修改的文件清單。
“--name-status”:顯示新增、修改、刪除的文件清單。
“--abbrev-commit”:僅顯示SHA-1 的前幾個字符,而非所有的40 個字符。
“--relative-date”:使用較短的相對時間顯示(比如,“2 weeks ago”)。
“--graph”: 顯示ASCII 圖形表示的分支合并歷史。
“--pretty”: 使用其他格式顯示歷史提交信息。可用的選項包括oneline,short,full,fuller 和format(后跟指定格式)。
“-(n)”: 僅顯示最近的n 條提交
--since,--after: 僅顯示指定時間之后的提交,$ git log --since=2.weeks
--until,--before: 僅顯示指定時間之前的提交。
--author: 僅顯示指定作者相關的提交。
--committer”僅顯示指定提交者相關的提交。
使用圖形化工具查閱提交歷史:gitk,它是用Tcl/Tk寫成的,基本上相當于git log命令的可視化版本,凡是git log可以用的選項也都能用在gitk上。在項目工作目錄中輸入
$ gitk
gitk命令后,就會啟動gitk圖形化工具,如果提示沒有安裝,則執行以下命令進行安裝gitk:
$ sudo apt-get install gitk
撤銷操作:有些操作并不總是可以撤銷的,所以請務必謹慎小心,一旦失誤,就有可能丟失部分工作成果。
修改最后一次提交:想要撤銷剛才的提交操作,可以使用--amend選項重新提交:
$ git commit --amend
此命令將使用當前的暫存區域快照提交。如果剛才提交完沒有作任何改動,直接運行此命令的話,相當于有機會重新編輯提交說明,而所提交的文件快照和之前的一樣。啟動文本編輯器后,會看到上次提交時的說明,編輯它確認沒問題后保存退出,就會使用新的提交說明覆蓋剛才失誤的提交。如果剛才提交時忘了暫存某些修改,可以先補上暫存操作,然后再運行--amend 提交:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
三條命令最終得到一個提交,第二個提交命令修正了第一個的提交內容。
取消已經暫存的文件:
$ git reset HEAD test.txt
取消對文件的修改:
$ git checkout -- test.txt
這條命令有些危險,所有對文件的修改都沒有了。所以在用這條命令前,請務必確定真的不再需要保留剛才的修改。
遠程倉庫的使用:遠程倉庫是指托管在網絡上的項目倉庫。管理遠程倉庫的工作,包括添加遠程庫,移除廢棄的遠程庫,管理各式遠程庫分支,定義是否跟蹤這些分支等。
查看當前的遠程庫:要查看當前配置有哪些遠程倉庫,可以用
$ git remote
它會列出每個遠程庫的簡短名字。在克隆完某個項目后,至少可以看到一個名為origin 的遠程庫,Git 默認使用這個名字來標識你所克隆的原始倉庫。也可以加上”-v”選項,顯示對應的克隆地址。
添加遠程倉庫:要添加一個新的遠程倉庫,可以指定一個簡單的名字,以便將來引用,運行
$ git remote add [shortname] [url]
從遠程倉庫抓取數據:
$ git fetch [remote-name]
此命令會到遠程倉庫中拉取所有你本地倉庫中還沒有的數據。運行完成后,你就可以在本地訪問該遠程倉庫中的所有分支,將其中某個分支合并到本地,或者只是取出某個分支。fetch 命令只是將遠端的數據拉到本地倉庫,并不自動合并到當前工作分支,只有當你確實準備好了,才能手工合并。如果設置了某個分支用于跟蹤某個遠端倉庫的分支,可以使用
$ git pull
git pull 命令自動抓取數據下來,然后將遠端分支自動合并到本地倉庫中當前分支。
推送數據到遠程倉庫:
$ git push [remote-name] [branch-name]
只有在所克隆的服務器上有寫權限,或者同一時刻沒有其他人在推數據,這條命令才會如期完成任務。如果在你推數據前,已經有其他人推送了若干更新,那你的推送操作就會被駁回。你必須先把他們的更新抓取到本地,并到自己的項目中,然后才可以再次推送。
查看遠程倉庫信息:
$ git remote show [remote-name]
查看某個遠程倉庫的詳細信息。
遠程倉庫的刪除和重命名:可以用git remote rename命令修改某個遠程倉庫的簡短名稱,比如想把pb改成paul,可以這樣運行:
$ git remote rename pb paul
對遠程倉庫的重命名,也會使對應的分支名稱發生變化,原來的pb/master 分支現在成了paul/master。碰到遠端倉庫服務器遷移,或者原來的克隆鏡像不再使用,又或者某個參與者不再貢獻代碼,那么需要移除對應的遠端倉庫,可以運行git remote rm 命令:
$ git remote rm paul
打標簽:同大多數VCS 一樣,Git 也可以對某一時間點上的版本打上標簽。人們在發布某個軟件版本(比如v1.0 等等)的時候,經常這么做。
列出已有的標簽:
$ git tag
顯示的標簽按字母順序排列,所以標簽的先后并不表示重要程度的輕重。如果只對某系列的版本感興趣,可以使用:
$ git tag -l 'v1.4.2.*'
新建標簽:Git使用的標簽有兩種類型,輕量級的(lightweight)和含附注的(annotated)。輕量級標簽就像是個不會變化的分支,實際上它就是個指向特定提交對象的引用。而含附注標簽,實際上是存儲在倉庫中的一個獨立對象,它有自身的校驗和信息,包含著標簽的名字,電子郵件地址和日期,以及標簽說明,標簽本身也允許使用GNU Privacy Guard (GPG) 來簽署或驗證。一般都建議使用含附注型的標簽,以便保留相關信息。
含附注的標簽:
$ git tag -a v1.0 -m 'my version 1.0'
而-m選項則指定了對應的標簽說明,Git會將此說明一同保存在標簽對象中。如果在此選項后沒有給出具體的說明內容,Git會啟動文本編輯軟件供你輸入。
可以使用git show命令查看相應標簽的版本信息,并連同顯示打標簽時的提交對象:
$ git show v1.0
簽署標簽:如果你有自己的私鑰,還可以用GPG來簽署標簽,只需要把之前的-a改為-s即可。
輕量級標簽:輕量級標簽實際上就是一個保存著對應提交對象的校驗和信息的文件。要創建這樣的標簽,一個-a,-s 或-m 選項都不用,直接給出標簽名字即可
$ git tag v2.0
驗證標簽:可以使用
$ git tag -v [tag-name]
的方式驗證已經簽署的標簽。此命令會調用GPG來驗證簽名,所以你需要有簽署者的公鑰,存放在keyring中才能驗證。
后期加注標簽:可以在后期對早先的某次提交加注標簽。只要在打標簽的時候跟上對應提交對象的校驗和(或前幾位字符)即可:
$ git tag -a v1.3 d06e3de00
分享標簽:默認情況下,git push并不會把標簽傳送到遠端服務器上,只有通過顯式命令才能分享標簽到遠端倉庫,運行
$ git push origin [tagname]
即可。如果要一次推送所有(本地新增的)標簽上去,可以使用--tags選項:
$ git push origin --tags
Git分支
???????? Git中的分支,其實本質上僅僅是個指向commit 對象的可變指針。Git會使用master 作為分支的默認名字。在若干次提交后,你其實已經有了一個指向最后一次提交對象的master 分支,它在每次提交的時候都會自動向前移動。
???????? 創建一個新的分支,即創建一個新的分支指針。比如創建一個testing分支,可以使用git branch命令:
$ git branch testing
HEAD特別指針,在Git中,它是一個指向你正在工作中的本地分支的指針。運行git branch 命令,僅僅是建立了一個新的分支,但不會自動切換到這個分支中去。要切換到其它分支,可以執行git checkout命令:
$ git checkout testing
這樣HEAD就指向了testing分支。每次提交后HEAD隨著分支一起向前移動。
$ git checkout -b testing
相當于:
$ git branch testing
$ git checkout testing
兩條命令。
由于Git中的分支實際上僅是一個包含所指對象校驗和(40個字符長度SHA-1字串)的文件,所以創建和銷毀一個分支就變得非常廉價。說白了,新建一個分支就是向一個文件寫入41 個字節(外加一個換行符)那么簡單,當然也就很快了。轉換分支的時候最好保持一個清潔的工作區域。Git會把工作目錄的內容恢復為檢出某分支時它所指向的那個commit 的快照。它會自動添加、刪除和修改文件以確保目錄的內容和你上次提交時完全一樣。
分支合并:用git merge命令來進行合并,
$ git merge testing
?刪除一個分支:
$ git branch -d testing
沖突的合并:要看看哪些文件在合并時發生沖突,可以用
$ git status
查閱。任何包含未解決沖突的文件都會以未合并(unmerged)狀態列出。Git會在有沖突的文件里加入標準的沖突解決標記,可以通過它們來手工定位并解決這些沖突。在解決了所有文件里的所有沖突后,運行
$ git add
將把它們標記為已解決(resolved)。因為一旦暫存,就表示沖突已經解決。最后再用
$ git commit
來完成這次合并提交。
???????? 如果想用一個有圖形界面的工具來解決沖突,可以運行
$ git mergetool
它會調用一個可視化的合并工具并引導你解決所有沖突。
分支管理:git branch命令不僅僅能創建和刪除分支,如果不加任何參數,它會給出當前所有分支的清單。若要查看各個分支最后一次commit的信息,運行,?
$ git branch -v
要從該清單中篩選出你已經(或尚未)與當前分支合并的分支,可以用--merge 和--no-merged選項。比如,
$ git branch --merge
查看哪些分支已被并入當前分支。清單中帶有”*”字符的表示當前所在的分支。一般來說,列表中沒有”*”的分支通常都可以用git branch -d來刪掉。對于未合并的分支,用git branch -d刪除該分支會導致失敗。不過,如果你堅信你要刪除它,可以用大寫的刪除選項-D 強制執行,例如,
$ git branch -D testing
分支式工作流程:長期分支、特性分支
???????? 特性分支:在任何規模的項目中都可以使用特性(Topic)分支。一個特性分支是指一個短期的,用來實現單一特性或與其相關工作的分支。
???????? 請務必牢記這些分支全部都是本地分支,這一點很重要。當你在使用分支及合并的時候,一切都是在你自己的Git倉庫中進行----完全不涉及與服務器的交互。
???????? 遠程分支(remote branch):是對遠程倉庫狀態的索引。它們是一些無法移動的本地分支;只有在進行Git的網絡活動時才會更新。遠程分支就像是書簽,提醒著你上次連接遠程倉庫時上面各分支的位置。
???????? 推送:要想和其他人分享某個分支,你需要把它推送到一個你擁有寫權限的遠程倉庫。你的本地分支不會被自動同步到你引入的遠程分支中,除非你明確執行推送操作。換句話說,對于無意分享的,你盡可以保留為私人分支,而只推送那些協同工作的特性分支。可以運行
$ git push (遠程倉庫名) (分支名)
跟蹤分支:從遠程分支檢出的本地分支,稱為跟蹤分支(tracking branch)。跟蹤分支是一種和遠程分支有直接聯系的本地分支。在跟蹤分支里輸入
$ git push
Git會自行推斷應該向哪個服務器的哪個分支推送數據。反過來,在這些分支里運行
$ git pull
會獲取所有遠程索引,并把它們的數據都合并到本地分支中來。
???????? 在克隆倉庫時,Git通常會自動創建一個master分支來跟蹤origin/master。這正是git push和git pull一開始就能正常工作的原因。當然,你可以隨心所欲地設定為其它跟蹤分支,比如origin 上除了master 之外的其它分支,
$ git checkout -b [分支名] [遠程名]/[分支名]
刪除遠程分支:如果不再需要某個遠程分支了,比如搞定了某個特性并把它合并進了遠程的master 分支(或任何其他存放穩定代碼的地方),可以用這個非常無厘頭的語法來刪除它:
$ git push [遠程名]:[分支名]
衍合:把一個分支整合到另一個分支的辦法有兩種:merge(合并)和rebase(衍合)。
???????? 有了rebase命令,就可以把在一個分支里提交的改變在另一個分支里重放一遍。如,
$ git checkout testing
$ git rebase master
它的原理是回到兩個分支(你所在的分支和你想要衍合進去的分支)的共同祖先,提取你所在分支每次提交時產生的差異(diff),把這些差異分別保存到臨時文件里,然后從當前分支轉換到你需要衍合入的分支,依序使用每一個差異補丁文件。衍合能產生一個更為整潔的提交歷史。如果視察一個衍合過的分支的歷史記錄,看起來更清楚,仿佛所有修改都是先后進行的,盡管實際上它們原來是同時發生的。現在可以回到master分支然后進行一次快進合并:
$ git checkout master
$ git merge testing
$ git rebase master testing
命令會先檢出特性分支testing,然后在主分支master上重演,然后快進主分支master,
$ git checkout master
$ git merge testing
?永遠不要衍合那些已經推送到公共倉庫的更新。在衍合的時候,實際上拋棄了一些現存的commit 而創造了一些類似但不同的新commit。如果你把commit 推送到某處然后其他人下載并在其基礎上工作,然后你用git rebase 重寫了這些commit 再推送一次,你的合作者就不得不重新合并他們的工作,這樣當你再次從他們那里獲取內容的時候事情就會變得一團糟。如果把衍合當成一種在推送之前清理提交歷史的手段,而且僅僅衍合那些永遠不會公開的commit,那就不會有任何問題。如果衍合那些已經公開的commit,而與此同時其他人已經用這些commit 進行了后續的開發工作,那就麻煩了。
服務器上的Git
???????? 建立一個大家都可以訪問的共享倉庫,從那里推送和拉取數據。我們將把這個倉庫稱為“Git 服務器”。遠程倉庫通常只是一個純倉庫(bare repository)----一個沒有當前工作目錄的倉庫。因為該倉庫只是一個合作媒介,所以不需要從一個處于已從硬盤上檢出狀態的快照;倉庫里僅僅是Git 的數據。簡單的說,純倉庫是你項目里.git 目錄的內容,別無他物。
???????? 協議:Git可以使用四種主要的協議來傳輸數據:本地傳輸,SSH協議,Git協議和HTTP 協議。
???????? 在服務器部署Git:開始架設Git 服務器的時候,需要把一個現存的倉庫導出為新的純倉庫----不包含當前工作目錄的倉庫。方法非常直截了當。把一個倉庫克隆為純倉庫,可以使用clone 命令的--bare 選項。純倉庫的目錄名以.git 結尾,如?
$ git clone -bare my_project my_project.git
現在在my_project.git中已經有了一份Git目錄數據的副本。
???????? 有了倉庫的純副本以后,剩下的就是把它放在服務器上并設定相關的協議。假設一個域名為git.example.com的服務器已經架設好,并可以通過SSH 訪問,而你想把所有的Git倉庫儲存在/opt/git 目錄下。只要把純倉庫復制上去:
$ scp -r my_project.git user@git.example.com:/opt/git
現在,其他對該服務器具有SSH訪問權限并可以讀取/opt/git的用戶可以用以下命令克隆:
$ git clone user@git.example.com:/opt/git/my_project.git
假如一個SSH 用戶對/opt/git/my_project.git 目錄有寫權限,他會自動具有推送權限。這時如果運行git init 命令的時候加上--shared 選項,Git 會自動對該倉庫加入可寫的組:?
$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared
現在已經可以開始在同一個項目上密切合作了。
???????? Git托管服務:可供選擇的托管服務數量繁多,如GitHub。
分布式Git
???????? 分布式工作流程:同傳統的集中式版本控制系統(CVCS)不同,開發者之間的協作方式因Git 的分布式特性而變得更為靈活多樣。在集中式系統上,每個開發者就像是連接在集線器上的節點,彼此的工作方式大體相像。而在Git 網絡中,每個開發者同時扮演著節點和集線器的角色,這就是說,每一個開發者都可以將自己的代碼貢獻到另外一個開發者的倉庫中,或者建立自己的公共倉庫,讓其他開發者基于自己的工作開始,為自己的倉庫貢獻代碼。于是,Git 的分布式協作便可以衍生出種種不同的工作流程。
以上內容摘自于《Pro Git》
實際工作中常用命令匯總:
1. 查看遠程分支:$ git branch -a
2. 查看本地分支:$ git branch
3. 切換分支:$ git checkout 分支名
4. 更新到指定版本:$ git reset --hard?39c9064fe34a1331e3624fbbef33a3f66df8f6ba?
5. 更新到上個版本:$ git reset --hard HEAD^
6. 將遠程分支下載到本地:$ git checkout -b ?branch1 origin/branch1
7. 創建新分支,并立即切換到此新分支:$ git checkout -b branchname
8. 從遠程分支下載指定的分支:$ git pull origin branchname
9. 查看某個文件作了哪些修改:$ git diff src/a.cpp
10. 在合并進倉庫之前,修改上次的提交:$ git commit --amend
11. 撤銷為提交的修改:$ git checkout -- a.cpp
12. 撤銷當前目錄下所有文件的修改(慎用):$ git checkout .
13. 查看某個文件詳細的修改信息:$ git blame src/a.cpp
14. 刪除本地所有未提交的新增的文件(如果文件已經被staged不會被回退):$ git clean -df
15. 撤銷本地所有未提交的更改(包括已經被staged的文件,但不包括新增的文件):$ git reset --hard
16. 修改指定文件的名字,如將a.cpp重命名為b.cpp:$ git mv a.cpp b.cpp
17. 刪除遠程倉庫中指定的文件src/a.cpp:$ git rm src/a.cpp
18. 刪除遠程倉庫中指定的目錄src/aa:$ git rm src/aa -r -f
19.?假如之前基于master新建了一個分支dev,但是后來master有了多于一次的提交,但是dev一直沒有改動,假如現在想把master的提交更新到dev分支上,因為dev分支一直沒有改動過,假如master提交了兩次,除了手動調整改動的文件外還可以這樣操作,當前在dev分支:$ git merge master? , $ git reset HEAD^^,因為master多于一次的提交,直接git merge master,在git push是不行的?
20.?如果一個項目的提交記錄太多,直接使用git log并不太方便查看提交歷史,此時可通過tree的方式輸出,執行如下命令后,每次查看時終端執行 $ git lg 即可
git config --global alias.lg "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"
參考文獻:
1.?http://git-scm.com/book/zh/v1?
2.?http://gitref.org/zh/index.html?
總結
以上是生活随笔為你收集整理的Git基础(常用命令)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进程编程基础介绍
- 下一篇: 《GPU高性能编程CUDA实战》中代码整