深入學習:Windows下Git新手教程(上)
一,安裝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 protected]"
由於Git是分布式版本號控制系統。每一個機器都須要一個標識,也就是:你的名字和Email地址。
二。創建版本號庫
2.1創建資源庫所在的文件夾,命令:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
pwd命令用於顯示當前文件夾完整路徑,為了避免各種問題我們盡量避免路徑命中出現中文字符。
2.2通過git init命令把這個文件夾編程GIt能夠管理的倉庫:
$ git init
Initialized 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 status On branch master Changes 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.txt no changes added to commit (use "git add" and/or "git commit -a")
運行git status命令,會打印提示消息。
上述提示消息中告訴我們文件被改動,並沒有提交。
3.3使用git diff命令查看詳細改動內容;
$ git diff diff --git a/test.txt b/test.txt index 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 log commit 4e8b0d0aaa685a83fb96fe52997e5af1e9e541ce Author: bill <[email protected]> Date: ? Sat Jun 28 13:48:29 2014 +0800 ? ? add a new line again commit d4d025a1cffaa761a7b82f39551465f7610a82db Author: bill <[email protected]> Date: ? Sat Jun 28 13:47:43 2014 +0800 ? ? add a new line commit 3b15333fdbb147f183a9d3013eadfafc9b05b127 Author: bill <[email protected]> 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=oneline 4e8b0d0aaa685a83fb96fe52997e5af1e9e541ce add a new line again d4d025a1cffaa761a7b82f39551465f7610a82db add a new line 3b15333fdbb147f183a9d3013eadfafc9b05b127 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=oneline d4d025a1cffaa761a7b82f39551465f7610a82db add a new line 3b15333fdbb147f183a9d3013eadfafc9b05b127 wrote a test file這個時候我們發現記錄中已經少了一條。而且打開文件也會發現。最後改動的內容已經不見了。
還拿上面的樣例來說。假設項目管理員發現編譯不能通過的原因不是模塊負責人的誤操作引起的,而是有其它原因引起的,而且當前須要公布的版本號中須要模塊負責人的改動。可是版本號已經回退了,是否能再回退到回退前的版本號呢?
答案是肯定的。我們僅僅須要知道我們須要回退到的那個版本號號commit id就可以(比如當前的命令窗體沒有關閉,我們能夠輕輕滑動滾軸就能夠看到之前的版本號號),或者知道前面一部分也能夠。
$ git reset --hard 4e8b0d0 HEAD is now at 4e8b0d0 add a new line again讀者能夠使用git log進行查看,是否已經回退成功。
可是假設當前的命令窗體已經關閉了,我們無法在命令窗體中查看我們之前打印的版本號號了怎麽辦?git也為我們提供了一個命令來記錄我們每次運行的命令“git reflog”
$ git reflog 4e8b0d0 [email protected]{0}: reset: moving to 4e8b0d0 d4d025a [email protected]{1}: reset: moving to HEAD^ 4e8b0d0 [email protected]{2}: commit: add a new line again d4d025a [email protected]{3}: commit: add a new line 3b15333 [email protected]{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.txt rm ‘test1.txt‘
六,遠程倉庫
我們知道Git是分布式版本號控制系統。同一個Git倉庫。能夠分不到不同的機器上。怎麽分布呢?最早,有一臺機器又一個原始版本號庫。此後其它機器進行克隆原始的版本號,而且每臺機器的版本號庫版本號是一樣的,沒有主次之分。
而且我們能夠在充當“server”的機器上進行克隆。也可在同一臺機器上克隆多個版本號庫,僅僅要不在同一個文件夾下就好。
6.1從“server”倉庫克隆。使用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 "[email protected]" 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 [email protected]
回車。使用默認設置就好。無需設置password。假設順利在用戶主文件夾下會看到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 repobutton,創建一個新的倉庫。
創建成功後的界面:
第五步,將本地資源庫推送到遠程倉庫中。
由於我們本地已經存在了一個倉庫,我們能夠依據上面的提示將本地的倉庫推送到遠程倉庫中去。(請註意username正確。你自己的username)
$ git remote add origin https://github.com/huangyabin001/learngit.git
運行上述命令。沒有不論什麽信息提示;
接著運行
$ git push -u origin master Username for ‘https://github.com‘: huangyabin001 Password for ‘https://[email protected]‘: 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 -> master Branch master set up to track remote branch master from origin.
在輸入的過程中會要求你輸入你在GitHub上的username和password。依據提示進行操作就可以。遠程克隆到本地就不再贅述了,依照上面的命令進行運行就可以。
刷新GitHub我們就能夠看到我們push的倉庫中的內容了。
深入學習:Windows下Git新手教程(上)