Git

參考廖雪峯的Git教程

Git是目前世界上最先進的分佈式版本控制系統。版本控制系統,能記錄每次文件的改動。

集中式版本控制系統,版本庫是集中存放在中央服務器的,需要聯網。SVN修正了CVS的一些穩定性問題,是目前用得最多的集中式版本庫控制系統。

分佈式版本控制系統,根本沒有中央服務器,每個人的電腦上都是一個完整的版本庫,不必聯網。多人協作時,只需把各自的修改推送給對方。因爲每個人的電腦都有完整的版本庫,安全性高很多。(通常也有一臺充當“中央服務器”的電腦,但僅僅是用來方便“交換”大家的修改)

注意:

所有的版本控制系統,只能跟蹤文本文件的改動,比如TXT、網頁、程序代碼等。而圖片、視頻、Word文件是二進制文件,沒法跟蹤文件的變化。

Nodepad++:使用Windows要特別注意,千萬不要使用Windows自帶的記事本編輯任何文本文件,會在每個文件開頭添加0xefbbbf字符,會遇到很多問題。建議下載Nodepad++代替記事本,把Notepad++的默認編碼設置爲UTF-8 without BOM。

UTF-8編碼:文本是有編碼的,如果沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼,所有語言使用同一種編碼,既沒有衝突,又被所有平臺所支持。

一、安裝

在Windows上使用Git,可從Git官網直接下載安裝程序https://git-scm.com/downloads,按默認選項安裝。開始菜單“Git”->“Git Bash”,彈出類似命令行窗口如下圖,說明Git安裝成功。

Git是分佈式版本控制系統,每臺機器必須自報家門(名字和Email地址)。--global表示你這臺機器所有的Git倉庫都使用這個配置。在命令行輸入:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

二、工作區和版本庫

工作區(Working Directory)指在電腦裏能看到的目錄。版本庫(Repository)指工作區的隱藏目錄.git,這個不算工作區。

Git的版本庫有stage(或者叫index)暫存區,Git自動創建的第一個分支master,及指向master的指針HEAD。

git add把文件修改添加到暫存區,git commit把暫存區的所有內容提交到當前分支。Git跟蹤並管理的是修改,而非文件。每次修改,如果不用git add到暫存區,就不會加入到commit中。

git-repo

三、創建版本庫

版本庫又名倉庫,可簡單理解爲一個目錄,該目錄裏所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,在將來某個時刻可以“還原”。

(1)創建一個空目錄learngit,有內容的目錄也可以。如果使用Windows系統,確保目錄名不含中文。

(2)運行git init把這個目錄變成Git可以管理的倉庫,當前目錄下多了.git文件夾(默認隱藏)。

(3)把文件添加到版本庫。編寫文件,放到learngit或其子目錄下。

四、基本命令

git add readme.txt

告訴Git,把文件修改添加到倉庫;

git commit -m "wrote a readme file"

告訴Git,把(多個)文件提交到倉庫,-m後面輸入的是本次提交說明,最好是有意義的;

git status

獲取倉庫當前的狀態;

Untracked files 有未被跟蹤的文件
Changes to be committed 有未提交的文件
nothing to commit, working tree clean 沒有被修改的文件

git diff

查看具體修改的內容(difference),顯示的格式是Unix通用的diff格式。

五、版本回退

git log

查看歷史記錄,顯示從最近到最遠的提交日誌,以便確定要回退到哪個版本。git log --pretty=oneline使每條記錄顯示在同一行。

git reset --hard b8094

回退到指定版本,可以是未來的版本。

git reset --hard HEAD^

回退到上一個版本。

git reflog

記錄你的每一次命令。如果已經關閉cmd,要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

每提交一個新版本,Git會把它們自動串成一條時間線。Git在內部有個指向當前版本的HEAD指針,回退版本時,Git僅僅是修改HEAD的指向,版本回退速度非常快。

b8094a0...是commit id(版本號),是SHA1計算出來的一個非常大的數字,用十六進制表示。Git是分佈式的版本控制系統,多人在同一個版本庫裏工作時爲了避免衝突。版本號寫前幾位就可以,Git會自動去找。

當前版本HEAD,上一個版本HEAD^,上上一個版本HEAD^^,往上100個版本HEAD~100。cmd控制檯中換行符默認是^,輸入HEAD^,回車可能出現more?問下一行是否需要再輸入,最好使用HEAD~。

 

git checkout -- readme.txt 

readme.txt文件在工作區的修改全部撤銷,這裏有兩種情況:

一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。

總之,就是讓這個文件回到最近一次git commitgit add時的狀態。

git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區

git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。再使用git checkout

假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麼辦呢?還記得版本回退一節嗎?可以回退到上一個版本。不過,這是有條件的,就是你還沒有把自己的本地版本庫推送到遠程。還記得Git是分佈式版本控制系統嗎?我們後面會講到遠程版本庫,一旦你把stupid boss提交推送到遠程版本庫,你就真的慘了

當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

 

 

 

.gitignore項目忽略文件  所使用IDE的配置文件,如.idea(WebStrom)、.vscode

.git存放項目的不同版本

 

使用碼雲

碼雲(https://gitee.com/),國內的Git託管服務。碼雲提供免費的Git倉庫,還集成了代碼質量檢測、項目演示等功能。對於團隊協作開發,碼雲還提供項目管理、代碼託管、文檔管理的服務,5人以下小團隊免費。

(1)註冊賬號並登錄,上傳自己的SSH公鑰。右上角用戶頭像->菜單“設置”->“SSH公鑰”,填寫一個便於識別的標題,然後把用戶主目錄下的.ssh/id_rsa.pub文件的內容粘貼進去:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章