一,安裝Git:1.1Linux上安裝命令:
sudo apt-get install git
1.2在Windows上安裝Git:
使用Windows版的msysgit,官方:http://msysgit.github.io/,點擊進入官網,如果官網無法正常下載我這裡有當前的最新版,已經上傳到CSDN上,為:http://download.csdn.net/detail/huangyabin001/7564005,點擊進入下載
1.3安裝完成進行配置:
$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"
因為Git是分布式版本控制系統,每個機器都需要一個標識,也就是:你的名字和Email地址。
二,建立版本庫2.1建立資產庫所在的目錄,命令:
$ mkdir learngit$ cd learngit$ pwd/Users/michael/learngit
pwd命令用於顯示目前的目錄完整路徑,為了避免各種問題我們盡量避免路徑命中出現中文字元。
2.2通過git init命令把這個目錄編程GIt可以管理的倉庫:
$ git initInitialized empty Git repository in /Users/michael/learngit/.git/
!注意:版本控制系統只能跟蹤文字檔的改動,例如txt檔案、網頁和所有的程式碼。版本控制器可以告訴你你的每次改動,但是圖片、視頻等二進位檔案沒辦法跟蹤,只知道檔案大小的改變。在Windows下word格式也是二進位檔案,因此我們如果要真正使用版本控制系統,就要以純文字方式來編寫檔案,並且強烈建議使用標準的UTF-8編碼。並且編輯文字檔我們推薦Notepad++,並要記得設定預設編碼為UTF-8 without BOM.
2.3添加檔案到資產庫第一步:我們建立一個文字檔到我們的資產庫learngit目錄下。第二步:試用git add命令告訴GIt,把檔案添加到資產庫
$ git add test.txt
執行命令後,沒有提示資訊。
第三步:用命令git commit告訴Git,把檔案提交到倉庫:
$ git commit -m "wrote a test file"
說明:執行上述命令會列印提示資訊如:
[master (root-commit) 3b15333] wrote a test file 1 file changed, 1 insertion(+) create mode 100644 test.txt
git commit命令:-m後面輸入的是本次提交的說明,可以輸入任意有意義的內容,這樣方便從記錄中找到改動記錄。
此外,我們可以同時添加很多檔案,一起提交,例如:
$ git add file1.txt$ git add file2.txt$ git add file3.txt$ git commit -m "add 3 files."
三,版本回退
3.1修改檔案
原始檔案中的內容為:this is my first time to use Notepad++;
在原始檔案中添加新的內容為:Add a new line。
3.2使用git status命令查看狀態:
$ git statusOn branch masterChanges not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working d modified: test.txtno changes added to commit (use "git add" and/or "git commit -a")
執行git status命令,會列印提示訊息。上述提示訊息中告訴我們檔案被修改,並沒有提交。
3.3使用git diff命令查看詳細修改內容;
$ git diffdiff --git a/test.txt b/test.txtindex d829b41..d6e3bba 100644--- a/test.txt+++ b/test.txt@@ -1 +1,2 @@-this is my first time to use Notepad\ No newline at end of file+this is my first time to use Notepad+Add a new line。\ No newline at end of file
3.4使用git add test.txt 命令和git commit -m “add a new line.”提交修改;然後在文本中新新增內容“add a new line again”,以上述命令重新執行一邊。
3.5使用git log查看修改記錄。
$ git logcommit 4e8b0d0aaa685a83fb96fe52997e5af1e9e541ceAuthor: bill <huangyabin001@163.com>Date: Sat Jun 28 13:48:29 2014 +0800 add a new line againcommit d4d025a1cffaa761a7b82f39551465f7610a82dbAuthor: bill <huangyabin001@163.com>Date: Sat Jun 28 13:47:43 2014 +0800 add a new linecommit 3b15333fdbb147f183a9d3013eadfafc9b05b127Author: bill <huangyabin001@163.com>Date: Sat Jun 28 13:18:15 2014 +0800 wrote a test file
上述命令git log執行後會列印出具體日誌資訊。從上述資訊中我們可以得到每次提交的記錄,記錄中包含提交的描述性資訊例如“wrote a test file”,提交時間,提交人的具體資訊等。而“commit 3b15333fdbb147f183a9d3013eadfafc9b05b127”則是我們每次提交的提交版本號碼,也稱之提交的記錄ID。
如果我們不需要提交人,提交時間等資訊,我們也可以以一種更簡潔的方式查看日誌,只需要加上“--pretty=online”參數即可。
$ git log --pretty=oneline4e8b0d0aaa685a83fb96fe52997e5af1e9e541ce add a new line againd4d025a1cffaa761a7b82f39551465f7610a82db add a new line3b15333fdbb147f183a9d3013eadfafc9b05b127 wrote a test file
3.6使用git reset命令回退版本
在工作當中,我們不可避免的使用回退版本,例如一個模組負責人提交了一部分代碼,在項目負責人發編譯發布版本前離開了工作崗位,項目負責人在編譯發布版本的時候發現模組負責人工作失誤造成項目無法編譯通過,為了不耽誤整個版本發布的工作,負責人不得不回退版本。
$ git reset --hard HEAD^HEAD is now at d4d025a add a new line
上述命令中Head在Git中的概念是一個指向你正在工作中的本地分支的指標(可以把HEAD想象為當前分支的別名),其所對應的分支本質是個指向commit對象的可變指標。截止到目前的學習中,在我們若干差提交後,我們已經有了一個指向最後一次提交的master分支,它在每次提交的時候都會自動向前移動。
我們使用git log --pretty=oneline查看:
$ git log --pretty=onelined4d025a1cffaa761a7b82f39551465f7610a82db add a new line3b15333fdbb147f183a9d3013eadfafc9b05b127 wrote a test file
這個時候我們發現記錄中已經少了一條,並且開啟檔案也會發現,最後修改的內容已經不見了。
還拿上面的例子來說,如果專案系統管理員發現編譯不能通過的原因不是模組負責人的誤操作引起的,而是有其他原因引起的,並且當前需要發布的版本中需要模組負責人的改動,但是版本已經回退了,能否再回退到回退前的版本呢?
答案是肯定的,我們只需要知道我們需要回退到的那個版本號碼commit id即可(例如當前的命令視窗沒有關閉,我們可以輕輕滑動滾軸就可以看到之前的版本號碼),或者知道前面一部分也可以。
$ git reset --hard 4e8b0d0HEAD is now at 4e8b0d0 add a new line again
讀者可以使用git log進行查看,是否已經回退成功。
但是如果當前的命令視窗已經關閉了,我們無法在命令視窗中查看我們之前列印的版本號碼了怎麼辦?git也為我們提供了一個命令來記錄我們每次執行的命令“git reflog”
$ git reflog4e8b0d0 HEAD@{0}: reset: moving to 4e8b0d0d4d025a HEAD@{1}: reset: moving to HEAD^4e8b0d0 HEAD@{2}: commit: add a new line againd4d025a HEAD@{3}: commit: add a new line3b15333 HEAD@{4}: commit (initial): wrote a test file
上述提示資訊中最前面的字串即是我們需要的版本號碼。
總結:我們在電腦中能夠看到的目錄,例如我們新疆an的檔案夾learngit檔案夾就是一個工作區,而隱藏目錄.git是git的版本庫,在這個版本中的index檔案(stage)是一個很重要的檔案,我們稱之為暫存區,git為我們自動建立的第一個分之master,以及指向master的一個指標稱作HEAD。我們之前添加檔案的操作“git add”,實際上是把檔案修改添加到暫存區。而提交操作“git commit”則是把暫存區的所有內容提交到當前分支。 因此我們如果要提交修改,在提交前我們應該執行git add命令,把修改的檔案添加到暫存區。
四,撤銷修改 git checkout
我們不能絕對的保證在日常的工作中不會出任何差錯,如果我們在提交代碼前發前發現有錯誤,但是我們沒有執行了git add命令把修改的檔案添加到了暫存區,那麼能否撤銷此次修改呢?
答案也是肯定的。
$ git checkout -- test.txt
執行上述命令,沒有任何提示訊息。
而且我們也可以使用命令git reset HEAD file把暫存區的修改撤掉(unstage),重新放回工作區。
git reset HEAD test.txt
五,刪除檔案
首先我們新鍵一個檔案,並去刪除它
如果我們沒用把它提交到版本庫我們可以在檔案管理工具手動刪除或者使用命令"rm 檔案名稱"的方式進行刪除,而如果我們要刪除版本庫中的檔案我們可以使用"git rm 檔案名稱"的方式來操作。
$ git rm test1.txtrm 'test1.txt'
六,遠程倉庫
我們知道Git是分布式版本控制系統,同一個Git倉庫,可以分不到不同的機器上,怎麼分布呢?最早,有一台機器又一個原始版本庫,此後其他機器進行複製原始的版本,而且每台機器的版本庫版本是一樣的,沒有主次之分。而且我們可以在充當“伺服器”的機器上進行複製,也可在同一台機器上複製多個版本庫,只要不在同一個目錄下就好。
6.1從“伺服器”倉庫複製,使用github進行git儲存第一步:註冊GItHub帳號,GitHub官網地址:https://github.com/ ,點擊開啟。第二步:建立SSH Key。在使用者主目錄下,如果有.ssh目錄,並且該目錄下有id_rsa和id_rsa.pub這兩個檔案,(跳過下一步操作),如果沒有在windows開啟Git Bash(linux 下開啟Shell),建立SSH Key:
$ ssh-keygen -t rsa -C "huangyabin001@163.com"Generating public/private rsa key pair.Enter file in which to save the key (/c/Users/STAR/.ssh/id_rsa):Created directory '/c/Users/STAR/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /c/Users/STAR/.ssh/id_rsa.Your public key has been saved in /c/Users/STAR/.ssh/id_rsa.pub.The key fingerprint is:1e:49:1e:a4:fa:38:65:0e:4c:41:20:df:67:a2:0c:bf huangyabin001@163.com
斷行符號,使用預設設定就好,無需設定密碼。如果順利在使用者主目錄下會看到id_rsa和id_rsa.pub兩個檔案,其中id_rsa是私密金鑰,不可泄露出去,而id_rsa.pub是公開金鑰,可以公開。
第三步:登陸GitHub,開啟Account settings,SSH Keys頁面,並點擊Add SH Key,添加SSH Key,Title可以自由定義,Key文字框中就是id_rsa.pub檔案的內容,直接複製即可。
如果點擊Add SSH Key無反應,也就是沒有彈出Title和Key的編輯框可能是瀏覽器的問題,換一個瀏覽器試試,360瀏覽器6.3的版本(其他版本沒試,整的我開始還以為為是被牆掉了,後來驗證一下才發現是瀏覽器的問題)就會出現這樣的失誤。
這裡還需要解釋一下,GitHub需要SSH Key的原因是為了確認確實是由你來提交的,而不是他人。
第四步:在GitHub上點擊Create a new repo按鈕,建立一個新的倉庫。
建立成功後的介面:
第五步,將本地資產庫推送到遠程倉庫中。
由於我們本地已經存在了一個倉庫,我們可以根據上面的提示將本地的倉庫推送到遠程倉庫中去。(請注意使用者名稱正確,你自己的使用者名稱)
$ git remote add origin https://github.com/huangyabin001/learngit.git
執行上述命令,沒有任何資訊提示;
接著執行
$ git push -u origin masterUsername for 'https://github.com': huangyabin001Password for 'https://huangyabin001@github.com':Counting objects: 14, done.Delta compression using up to 4 threads.Compressing objects: 100% (9/9), done.Writing objects: 100% (14/14), 1.15 KiB | 0 bytes/s, done.Total 14 (delta 2), reused 0 (delta 0)To https://github.com/huangyabin001/learngit.git * [new branch] master -> masterBranch master set up to track remote branch master from origin.
在輸入的過程中會要求你輸入你在GitHub上的使用者名稱和密碼。根據提示進行操作即可。遠程複製到本地就不再贅述了,按照上面的命令進行執行即可。
重新整理GitHub我們就可以看到我們push的倉庫中的內容了。