一、git簡介
1、基本概念:
git是乙個開源的分布式版本控制系統。相對cvs和svn是集中式的版本控制系統。集中式版本控制系統的版本庫是集中放在**
伺服器的,每次工作的時候都得從**伺服器獲取最新的版本,完了以後再放回**伺服器。而分布式版本控制系統沒有**服器,
每個人電腦上都有乙個完整的版本庫,可以自己操作不受任何人影響。
2、版本庫(repository)
版本庫(repository)是版本控制系統用來存放所有歷史資料的地方,主要存放各個檔案的當前狀態,歷史修改時間,誰做的修改
以及修改的原因。舉個簡單的例子,就好比銀行的保險箱,每次往裡存錢,都會記錄誰,什麼時間,存放多少錢,存入的原因等。對應
的版本庫(repository)主要存放**(文件,資料,圖示等),並且每一次更新都要記錄誰,什麼時間,提交了什麼更新,以及更新
的原因是什麼。
git就相當於管理我們這個版本庫的管家,即銀行保險箱的管理人員。
二、git安裝
在linux下的centos下用安裝git
命令:yum -y install git
檢視git是否安裝成功
命令:git --version
三、git基本操作
1、建立版本庫
mkdir test_git//新建目錄test_git
cd test_git//進入目錄
git init//初始化git,現在git會管理這個目錄中的所有內容
2、增加檔案
touch test_git.c//建立乙個新檔案
git add test_git.c//告訴git我要新增乙個檔案,但是git並沒有把你所新增的檔案放入版本庫中,而是對內容進行hash後
成了乙個編號
3、將檔案提交
如圖所示,history就是版本庫,working directory是當前的工作目錄,而stage是暫存區也稱索引區存放工作目錄中那些
你打算提交到版本庫的變更,git add只是將檔案的索引提交的版本庫,而真正的內容並沒有進入版本庫。只有在git commit之後內容才新增到版本庫中。
上面的四條命令在工作目錄、暫存目錄(也叫做索引)和倉庫之間複製檔案。
4、檢視當前**狀態
git status
顯示:changes to be commited //表示將要提交但是尚未提交的修改(已經add但是尚未commit),也就是在stage區域已經有了,但是還沒有commit的內容
changed but not updated
// 表示已經修改但是還沒有新增到暫存區的內容(尚未add,當然尚未commit)
四、分支管理
1、概念:在做專案的時候,一次性不能寫完專案,需要每次更新**,但是又不想影響之前的**。這時候,你可以建立乙個分支,然後在這個分支裡寫東西,當覺得不好的時候,你可以把這個分支刪除掉,對你之前的主分支沒有任何影響。或者你覺得這個新特性超出了自己的預想,可以合併到主分支裡,這時候你只要把工作轉回主分支,然後合併分支,最後刪除分支,然後就跟那個分支沒建立一樣。
2、建立新分支:
git branch test //建立名為test的分支
3、切換分支:
git checkout test //切換到test分支工作, 與上面的命令經常一起使用
4、檢視分支:
git branch //檢視前版本庫(本地)的所有分支
5、合併分支:
git checkout master //切換到「要合併到」的分支,常見的就是test分支合併到master分支,所以先切換到master分支
git merge test //合併test分支到master分支
注意:在合併分支的時候有時候會出現
衝突(conflict)
的情況,建立的情況是master分支和test分支對同一檔案的同一處
**的內容不一樣(例如:master分支在hello.cpp中第三行寫入的是"hello", 而test分支在hello.cpp的第三行中寫入的是
「world」),這樣使得git不知道如何是好,這時候就需要你手工修改**了,我難道要記住master和test在同一位置的內容?當然
不用了,git會在git merge的反饋資訊中說明,**在何部分存在衝突。
6、刪除分支:
git branch -d test //刪除test分支
7、撤銷改動:
新增了不該新增的檔案,你可以這樣挽回:
git add . //
把所有的檔案都新增進去
git reset head readme //把
readme
檔案從暫存區域去除
發現你編輯錯了乙個檔案,你想把它恢復到上乙個版本的狀態
git checkout -- filename1 //
只撤消這乙個檔案
如上圖所示,每次提交時,git都會把它們串成一條時間線,這條時間線就是乙個分支。在git裡,master分支是主分支。head指向
master,而master指向提交,所以head指向當前分支。圖中的maint是另外乙個分支。綠色的5位字元表示提交的id,分別指向父節
點。分支用橘色顯示,分別指向特定的提交。當前分支由附在其上的
head
標識。 這張裡顯示最後5次提交,
ed489
是最新提交。
master
分支指向此次提交,另乙個
maint
分支指向祖父提交節點
。五、與遠端版本庫協作
github就是提交遠端版本庫服務的**,所以我們這裡的遠端版本庫為方便起見用github代替,上面我們得操作都是和本地
的git
互動,相當於是和本地的git小助手互動,如何將這些在本地的**和github上的版本庫連線起來:將本地的**推送到github上
1、轉殖github上的版本庫到本地:git clone
2、版本庫同步:git fetch //取來(fetch)遠端版本庫到本地,但是
並不與本地分支合併
3、拖入(pull)遠端版本庫:git pull//與本地分支合併,相當於
git fetch + git
4、推送到github上:git push
如何使用git?(新手學習筆記)
使用git前,需要先建立乙個倉庫 repository 您可以使用乙個已經存在的目錄作為git倉庫或建立乙個空目錄。使用您當前目錄作為git倉庫,我們只需使它初始化。命令 git init 使用我們指定目錄作為git倉庫。命令 git init newrepo base e anacoda py s...
git 使用新手大坑
1.我把所有的專案像eclipse裡面的排列一樣 然後對某乙個專案 比如 fragmentbestpractic進行的check out 這個意思當然是檢出,因為之前我把fragmentbestpractic這個單個專案的 已經提交到github 了,然後本地有點錯,我就想恢復下這個專案,但是git...
新手使用git(一)
一 目的 1.記錄乙個版本 2.將 回退到之前的版本 3.檢視所有的版本 4.配合遠端倉庫,實現多人協作 二 適用場景 1.專案需求不斷變化 2.多人合作開發,不好合併 三 安裝時 1.路徑不要為中文,檔名不能重複 2.安裝好之後,任何資料夾 右鍵 選擇git bash here 輸入git ver...