Git是用於Linux內核開發的版本控制工具。與CVS、Subversion一類的集中式版本控制工具不同,它采用了分布式版本庫的作法,不需要服務器端軟件,就可以運作版本控制,使得源代碼的發布和交流極其方便。Git的速度很快,這對於諸如Linux內核這樣的大項目來說自然很重要。Git最為出色的是它的合並追蹤(merge tracing)能力
Git官網下載地址:https://git-scm.com/download/
Git完成默認配置安裝後,在桌面點擊鼠標右鍵,會有兩個選項
Git GUI Here代表圖形界面模式
Git Bash Here代表命令行模式
這裡選擇命令行模式
之後需要先設置你的用戶名和email地址作為個人標示,這是非常重要的,因為每次Git提交都需要使用該信息
config --global user.name "用戶名" config --global user.email "郵箱地址"
–global 選項代表Git將使用該信息來處理你在系統中所做的一切操作,如果希望在一個特定的項目下使用不同的用戶名或email地址,可以在該項目中運行該命令而不用–global選項
配置完成後可以用以下命令查看個人信息
cat ~/.gitconfig
GitHub是以倉庫(Repositories)的概念來管理一個項目的,倉庫可以理解為一個目錄,該目錄下發生的所有文件變化,例如文件創建、文件修改、文件刪除等都可以被Git所跟蹤記錄
Git可以對每一個版本的修改進行記錄,並保存各個版本號,在需要的時候可以對版本進行更迭回退
創建倉庫的步驟也比較簡單
這裡選擇在D盤的git文件夾下創建
cd 命令用來打開文件夾 mkdir 命令用來創建文件夾 pwd 命令用來確定當前路徑
這樣,就可以看到D盤下生成了一個git文件夾了
之後,使用以下命令將git文件夾初始化為一個倉庫
git init
然後,在git文件夾下就可以看到多出一個名為 .git 的文件夾了,需要設置系統顯示隱藏的項目<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPrLFv8nS1L+0tb08YnIgLz4NCjxpbWcgYWx0PQ=="這裡寫圖片描述" src="http://www.2cto.com/uploadfile/Collfiles/20160825/2016082509164331.png" title="\" />
該文件夾用來記錄版本變化的,不可以手動修改
首先在git文件夾下新建一個test.txt文本文件,隨便輸入一些內容,我這裡輸入:11111111111
使用以下命令將之添加到暫存區中
git add test.txt
再將文件提交到Git倉庫
git commit -m '版本說明'
然後再來查看當前狀態,檢查是否還有文件未提交
git status
可以看到,提示說沒有文件需要提交,工作目錄是干淨的
之後再來修改test.txt文件,多添加一行內容:22222222222
再來查看當前狀態
提示說有文件被修改但還沒被提交
查看有哪些內容被修改了,由此可以查看文本內容的前後變化
git diff test.txt
此時test.txt就相當於一個新版本了,確認文件修改完成後,可以再次向倉庫提交文件,保存當前版本
查看當前所有版本
git log
可以看到一共有兩個版本號,提交者與提交時間都有記錄
如果覺得以上信息太繁雜,可以用以下命令查看簡短的版本信息
$ git log --pretty=oneline
之前已經知道了如何提交文件並查看版本信息,這裡再來學習如何回退到前一個版本
當前test.txt是第二個版本,文本內容應該是
11111111111 22222222222
這時想要讓它回退到第一個版本
git reset --hard HEAD^ 回退到上一個版本 git reset --hard HEAD^^ 回退到上上個版本 ··· git reset --hard HEAD~10 回退十個版本
可以看到已經回退到了第一個版本
當中,“27d08d6”該字段代表簡短型的版本號,由之前查看所有版本的圖片可知,是完整版本號的前綴字段
打開test.txt文件,可以看到文本內容已經變成了
11111111111
或者用以下命令查看文本內容
cat test.txt
查看版本信息
可以看到只剩下一個版本信息了
如果回退版本後後悔了,想要恢復到第二個版本,可以通過以下命令恢復到指定版本號
git reset --hard 指定版本號
不過此時我們不知道第二個版本的版本號,可以先來查詢
git reflog
可以看到一共記錄了三次版本信息,兩次修改內容,一次回退版本
則6789d5c就是我們需要的版本號,恢復之,並查看文本內容,可以看到內容又恢復到第二個版本了
在test.txt文件中再添加一行數據,現在的內容應該是:
11111111111 22222222222 33333333333
查看當前狀態
提示說有修改的內容未提交
此時,如果想要撤銷該修改,除了可以直接指定版本號進行回退外,也可以使用以下命令撤銷在工作區的修改操作
git checkout -- test.txt
可以看到文本內容又恢復了
該命令可以分為兩種情況
(1)在完成一次提交操作後,又對文件進行了修改操作,且此時文件還未添加到暫存區
此時執行該命令是恢復到上一次提交操作後的狀態,即撤銷在工作區進行的修改
(2)文件添加到了暫存區,此時進行了修改操作,且還未提交到倉庫
此時執行該命令是撤銷在添加到暫存區後進行的修改操作
在git文件夾下再新建一個one.txt文件,然後將之提交到倉庫中
此時,one.txt文件就已經存在於版本庫中了
然後再通過手動刪除或者使用以下命令刪除one.txt文件
rm one.txt
可以看到刪除操作也被記錄下來了,此時可以選擇直接commit,提交本次修改,或者使用以下命令從版本庫中恢復被刪除的文件
git checkout -- one.txt
查看目錄,可以看到文件已經恢復了
這裡來嘗試將本地倉庫提交到GitHub上,需要用戶先有一個GitHub賬號
我的GitHub賬號是:https://github.com/initobject
現在也是啥都沒有,之後會逐漸把自己之前做的東西上傳上去的
或者是可以看我的CSDN博客:http://blog.csdn.net/new_one_object
我的個人網站:http://www.initobject.com
在這之前需要先創建自己的創建SSH Key
如果之前已經創建過了,以下目錄中就會含有兩個密匙文件
id_rsa是私鑰,id_rsa.pub是公鑰
如果沒有,還需要先使用以下命令來創建
ssh-keygen -t rsa -C "[email protected]"(自己的郵箱地址)
輸入後可能需要連續敲幾次回車,之後就生成key了
登錄GitHub,進入Settings界面,點擊SSH and GPG keys,新建一個SSH key
添加成功後界面應該是這樣的
此時,我們要做的是把在本地電腦的工程提交到GitHub,所以需要先在GitHub上建立一個倉庫,工程名和描述可以隨意寫
點擊“Create repository”按鈕,就創建了一個Git倉庫了
現在這個test倉庫還是空的,GitHub提示我們可以通過命令行將該倉庫與本地工程進行關聯,然後推送本地工程文件
…or push an existing repository from the command line git remote add origin https://github.com/initobject/test.git git push -u origin master
以上命令根據不同的用戶名與倉庫名而會有所不同
根據該提示我們可以先輸入如下命令
git remote add origin https://github.com/initobject/test.git
再輸入
git push -u origin master
會提示用戶輸入GitHub用戶名與密碼
有時候因為網絡原因上傳文件到GitHub會失敗~~
此時,刷新GitHub網頁,可以看到文件都已經上傳成功了,可以下載下來與本地文件進行對比
之後,本地每次進行了修改操作後,可以直接用以下命令將工程推送到遠程倉庫中
git push origin master
以上是將本地倉庫推送到遠程倉庫中,那麼自然也可以將遠程倉庫克隆到本地倉庫中
在GitHub上再新建一個倉庫,命名為test2
在本地輸入如下命令就可以將test2工程克隆或者說下載到git文件夾下了
https://github.com/initobject/tets2
到目前為止,本地工程中只包含有一條主分支,即master分支
可以用以下命令查看所有分支,當前分支名的前邊會有一個星號
git branch
創建一個新分支並命名為dev,並切換到dev分支
git checkout -b dev
該命令表示創建並切換分支,相當於如下兩條命令
git branch dev 創建dev分支 git checkout dev 切換到dev分支
查看當前test.txt文件內容,並添加新的一行內容,再查看
在dev分支上向倉庫提交文件
切換到master分支,查看test.txt的內容,可以看到在master分支下文本內容並沒有被改動,因為改動操作是在dev分支下進行的
git checkout master
在master分支下,將dev分支的內容合並到master上,可以看到test.txt文件被改動了
git merge dev
之後,刪除dev分支
git branch -d dev