【轉載請註明出處!http://my.oschina.net/u/2337744/】 git
Git教程 app
前面已經介紹了Git的安裝與用戶的初始配置,接下來是Git的基本命令與代碼上傳。 ssh
【mkdir 文件夾名稱】命令:在當前目錄下建立一個指定名稱的文件夾。 學習
【cd 跳轉的目錄名稱】命令:跳轉到指定的目錄下,可使用相對路徑和絕對路徑。 編碼
【pwd】命令:顯示當前目錄。 spa
因爲使用Windows系統,爲了不遇到各類莫名其妙的問題,要確保目錄名(包括父目錄)不包含中文。 .net
【git init】命令:在當前目錄下建立一個版本庫。 命令行
【ls –ah / ls -a】命令:顯示當前目錄下的全部目錄和文件【包括以’.’開頭的隱藏目錄和隱藏文件】 版本控制
【git status】命令:查看當前git倉庫的狀態。 指針
【git add 文件名稱(多個文件用空格隔開)】命令:往版本庫的暫存區中添加純文本文件。
【git add】命令容許屢次添加,例如:
· | git add file1.txt
· | git add file2.txt file3.txt
· | git commit –m 「commit 3 files to repository!」
· | 以上三條命令將file1,file2,file3提交到git倉庫中。
【cat 當前目錄下的某個文本文件】命令:顯示指定文本文件的內容。
【git commit –m 「註釋信息」】命令:將暫存區中的文件提交到版本庫中。
【git diff 文件名稱】命令:經過git status命令發現未提交的已修改文件以後,能夠利用git diff命令查看該文件的內容發生了什麼改變。Git Bash會顯示改變的內容與以前的內容。
【git log】命令:查看版本庫中的詳細提交日誌【日誌包括做者,提交日期,提交註釋和commit id】。
【git log --pretty=oneline】命令:查看版本庫中日誌且一行輸出一個版本信息【信息包括commit id和提交註釋】。
【git reset --hard版本指定】命令:將已經提交的文件回溯到指定的版本,其中」版本指定」經過HEAD(當前的版本,與commit id版本號必定能夠指定版本)來指定。HEAD^是上一個版本,HEAD^^是上上一個版本,若是是上100個版本則經過HEAD~100來完成。
【git reset --hard 版本號commit id】命令:經過指定肯定的版本號來回溯到以前或者以後的版本。
【git reflog】命令:顯示全部版本號日誌,包括過去的版本和將來的版本。
【git reset HEAD 文件名稱】命令:重寫暫存區的目錄樹(包括文件),它將被master分支指向的目錄樹(包括文件)所替換,可是工做區不受影響。
git reset命令既能夠回退版本,也能夠把暫存區的修改回退到工做區。當咱們用HEAD時,表示最新的版本。
【git checkout - 文件名稱】命令:用當前暫存區的文件覆蓋工做區的文件。
【git checkout .】命令:用當前暫存區的所有文件覆蓋工做區的同名文件。一般命令後面加上一點而不是指定某一文件時,,命令表示對全部文件進行相同操做。
【rm 文件名稱】命令:刪除當前工做區的指定文件。
【git rm 文件名稱】命令:刪除當前暫存區中的指定文件而且刪除工做區中的相同文件。
【git rm --cache 文件名稱】命令:刪除當前暫存區中的指定文件。
【cd ~/.ssh】命令:若是存在ssh目錄/文件則跳轉到該目錄下,若是找不到該目錄則顯示不存在該目錄文件。
【ssh-keygen –t ras –C 「郵箱地址」】命令:生成SSH密鑰對(公鑰和密鑰)。具體指令信息在Git Bash中會有提示。
【git remote –v】命令:羅列已經添加的遠程庫的名稱和遠程庫的URL。
【git remote add 遠程庫名稱 遠程庫URL】命令:本地倉庫添加遠程倉庫,通常遠程倉庫名稱使用origin,遠程庫URL選擇SSH類型。
【git pull 遠程主機名稱 遠程分支名稱:本地分支名稱】命令:本地倉庫同步(拉取更合適)遠程倉庫的信息,將遠程分支信息拉取到本地分支裏。
【git push 遠程主機名稱 本地分支名稱:遠程分支名稱】命令:將本地倉庫的指定分支推送到遠程倉庫的指定分支裏。
【git pull/push 遠程主機名稱 源分支名稱:目的分支名稱】git pull/push命令格式。
【注意:第一次本地倉庫和遠程倉庫的通訊必須先拉取遠程倉庫信息以後才能夠推送本地倉庫信息,這是爲了不遠程倉庫已有信息與本地倉庫信息不對稱的衝突】
【git clone SSH類型遠程URL】命令:將遠程倉庫給克隆到本地倉庫中。
【rm –rf 本地倉庫的絕對地址】命令:刪除指定路徑的git倉庫,這條命令執行以後能夠刪除該倉庫所在的目錄。
【git branch】命令:羅列當前的全部分支,並在當前分支前面追加*號以區別其餘分支。
【git branch 分支名稱】命令:建立一個新的分支。
【git checkout 分支名稱】命令:切換到指定分支。
【git checkout –b 分支名稱】命令:建立並切換到新分支。
【git merge 分支名稱】命令:合併指定分支到當前分支。使用的是默認的快進式(fast forwarding)合併分支方式,它直接將當前分支的指針覆蓋掉指定分支的指針,這時指定分支的指針就消失了。
【git branch –d 分支名稱】命令:刪除指定分支。
【vi 文件名稱】命令:新建或者打開指定文件。
按一下Insert鍵進入編輯模式,編輯完畢以後能夠保存並退出,此時光標移動到文末,按一下Esc鍵,而後切換到大寫字母,連續輸入ZZ兩次就能夠保存並退出;若是隻想退出而且不保存當前的編輯,一樣須要文末按下Esc鍵,而後輸入「:」號。以後進入命令行模式,輸入q!退出文本編輯。
【git log –graph –pretty=oneline –abbrev-commit】命令:圖形方式顯示git的分支開展狀況。
【git merge --no-ff -m 「註釋」 分支名稱】命令:使用no-ff(no fastforwarding)參數合併指定分支到當前分支。使用非快進式合併分支方式,它直接將當前分支的指針移動到指定分支處,此時指定分支和當前分支的指針都指向同一處。
【git stash】命令:將當前的工做區儲存起來,儲存的地方暫時就叫作儲存域,儲存的當前工做區稱爲儲存區。
【git stash list】命令:查看當前儲存域的全部儲存工做區。
【git stash apply 儲存區號stash@{XXX號}】命令:將指定儲存區XXX給恢復到當前工做區,此時儲存域中依然含有該條儲存區信息。
【git stash drop 儲存區號stash@{XXX號}】命令:將指定儲存區XXX從儲存域中刪除。
【git stash pop儲存區號stash@{XXX號}】命令;將指定儲存區XXX從儲存域中恢復到當前工做區而且將它從儲存域中刪除。
【git stash clear】命令:清空儲存域。
【git branch –D 分支名稱】命令;用於強行刪除未合併到主分支的分支。
【git branch -a】命令:顯示全部本地/遠程分支以及當前本地/遠程分支所指向的分支。
【git branch –r】命令:顯示全部遠程分支以及當前遠程分支所指向的分支。
【git checkout –b 本地新建分支名稱 origin/遠程分支名稱】命令:將指定遠程分支建立到本地倉庫指定分支(本來本地沒有該指定分支)中。
【git branch –set-upstream 本地分支名稱 origin/遠程分支名稱】命令:將本地分支與遠程分支鏈接起來。
【git tag tag名稱】命令:往當前分支的當前版本號commit id中添加標籤tag。
【git tag tag名稱 版本號commit id】命令:往指定版本號commit id中添加標籤tag。
【git tag】命令:顯示全部標籤信息。
【git tag –a 名稱 –m 「註釋」 commit id】命令:往指定版本號commit id中添加標籤tag,並給tag添加註釋。
【git show tag名稱】命令:顯示指定tag的詳細內容。
【git tag –d tag名稱】命令:刪除本地的標籤。
【git push origin :refs/tags/標籤名稱】命令:能夠刪除一個遠程標籤。
【git push origin tag名稱】命令:推送一個本地標籤。
【git push origin --tags】命令:推送所有未推送的本地標籤。
【git log -1】命令:顯示最近一次提交的內容。
【本地刪除遠程文件夾/文件】
【第零步:查看】【git rm –r –n –cached 文件夾名稱/文件名稱】命令:羅列指定遠程文件夾的全部文件/文件,用來查看即將被刪除的文件信息;
【第一步:刪除】【git rm –r –cached 文件夾名稱/文件名稱】命令:刪除指定遠程文件夾的全部文件/文件;
【第二步:提交】【git commit –m 「註釋」】命令:提交刪除到本地倉庫;
【第三步:推送】【git push 遠程主機名稱 本地分支名稱:遠程分支名稱】命令:推送到遠程主機。
【配置別名】
【git config --global alias.別名 「固定的命令片斷」】命令:爲指定的命令片斷起別名。
例如:git config --global alias.ci ‘commit –m’將commit –m起別名爲ci;
git config –global alias.br ‘branch’將branch起別名爲br。
【別名的信息存儲在.git/config配置文件的[alias]後面,若是想要取消該別名,只要直接將它從[alias]後面刪除就能夠了】
【附】一般開發新功能是經過新建一個feature分支來實現的,最後完成以後就將這個分支給合併到主分支並刪除掉。
【專有名詞:repository 版本庫】
【專有名詞:working directory工做區】
【專有名詞:stage/index暫存區,目錄中顯示暫存區爲index,Git Bash顯示暫存區爲stage】
▓▏建立版本庫▕▓:
第一步:建立空目錄
首先是找到一個合適的地方,建立一個空目錄;
第二步:建立Git倉庫
經過git init命令在這個目錄建立Git能夠管理的倉庫【empty Git repository】;
此時當前目錄下多了一個.git目錄,該目錄是Git用來跟蹤管理版本庫的,沒事千萬不要手動修改裏面的文件,隨便修改容易破壞Git倉庫。
也不必定必須在空目錄下建立Git倉庫,選擇一個已經有東西的目錄也是能夠的。不過,不建議你使用本身正在開發的項目來學習Git,不然形成的一切後果概不負責。
第三步:把文件添加到版本庫
首先要明確的是,全部的版本控制系統,其實只能跟蹤文本文件的改動,好比TXT文件,網頁,全部的程序代碼等等,Git也不例外。版本控制系統能夠告訴你每次的改動,好比在第5行加了一個單詞「Linux」,在第8行刪了一個單詞「Windows」。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但無法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是隻知道圖片從100KB改爲了120KB,但到底改了啥,版本控制系統不知道,也無法知道。
不幸的是,Microsoft的Word格式是二進制格式,所以,版本控制系統是無法跟蹤Word文件的改動的,前面咱們舉的例子只是爲了演示,若是要真正使用版本控制系統,就要以純文本方式編寫文件。
由於文本是有編碼的,好比中文有經常使用的GBK編碼,日文有Shift_JIS編碼,若是沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼,全部語言使用同一種編碼,既沒有衝突,又被全部平臺所支持。
▓▏往版本庫中添加文件▕▓:
第一步:新建文本文件
在工做區(或者它的子目錄)下創建純文本文件」readme.txt」,
第二步:將readme.txt添加到git中
查看當前的git狀態,提示untracked files有readme.txt文件,這時就能夠將該文件添加到index暫存區中了,直接使用git add 「純文本文件名稱」命令能夠完成該操做;查看git狀態,提示有待提交文件在暫存區中,經過使用git commit –m 「註釋」命令將暫存區中的全部文件提交到git上面,最後是查看git狀態,提示該分支沒有文件待提交且工做區爲空。
▓▏版本更替▕▓:
第一步:修改readme.txt文件
第二步:提交修改事後的readme.txt到git倉庫中
先用git status查看git倉庫狀態,而後利用git diff查看與以前版本的差別,明確差別以後肯定是否將該文件提交到git倉庫中。明確要提交以後先將文件提交到index暫存區中,再次查看git倉庫狀態並提交暫存區的文件到git倉庫中,最後再查看一次git倉庫狀態。
▓▏追溯版本▕▓:
第一步:再次修改文件並提交到git版本庫中
而後經過git add命令和git commit命令將修改過的readme.txt文件提交到git版本庫中。咱們不斷地修改文件並提交到版本庫中,Git會不斷地保存commit(能夠看作是一個快照),一旦把文件誤刪了或者改亂了,咱們能夠從最近的一個commit中恢復文件並繼續工做。
第二步:將readme.txt回溯到第二版本
首先利用git log命令或者 git log --pretty=oneline命令獲得各版本的具體信息,其中會有一串長長的字符串是16進制的commit id,它是每一個版本的版本號。【也能夠經過Git GUI來查看版本歷史】
而後經過git reset --hard命令來回溯,其中--hard參數若是是HEAD類型則只能回溯到以前的版本,而若是是指定版本號commit id的話那就能夠回溯到某個將來的版本。版本號不用寫全,前幾位就能夠了,Git會自動去匹配。
commit id能夠經過git reflog命令來獲取,而後再經過git reset --hard commit id就能夠回溯到將來的版本了。