git使用篇

                                                    GIT篇

1. 分佈式與集中式管理

(1) 集中式管理控制:版本庫是集中存放在中央服務器,做代碼處理的時候都是在自己的個人電腦上,處理完代碼之後再提交給中央服務器。

集中式版本控制管理主要的毛病是必須聯網,在局域網上傳和下載還可以接受,如果在互聯網上就存在網速很慢的問題。

(2) 分佈式管理控制:分佈式版本系統控制通常有一臺充當中央服務器的電腦,作用是方便交換不同電腦之間的修改,當然沒有這個中央服務器,不同的電腦仍然可以工作。

(3) 創建版本庫與初始化git的配置

初始化git配置:

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

在提交的時候,需要設置全局配置,包括郵件和用戶名

(a) 創建一個空目錄

$ mkdir learngit

(b) 目錄變成Git可以管理的倉庫

$ git init

第一步:用命令git add,把文件添加到倉庫

$ git add readme.txt

第二步:用命令git commit,把文件提交到倉庫

$ git commit -m ‘wrote a readme file’

其中,-m後面輸入的是本次提交的說明

2. 時光穿梭

2.1 版本回退

(1) 文檔readme.txt修改其中的內容,通過git status可以時刻掌握倉庫當前的狀態。如下圖所示:

(2) 查看文檔最近到最遠的提交日誌,使用命令:git log,如果嫌顯示內容比較多,可以採用命令git log –pretty=oneline

(3) 在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫成HEAD~100,回退上一個版本的命令

git reset --hard HEAD^

也可以根據commit id來回退版本,相關命令爲git reset --hard commit_id

(4) 如果回退版本之後,想重新穿梭到最新的版本,可以通過命令git reflog查詢歷史命令,再通過git reset --hard commit_id完成操作

2.2 工作區與暫存區

(1) 版本庫

其中stage爲暫存區,git創建的一個分支master,以及指向master的指針HEAD

(2) 添加工作區到暫存區(stage)

(3) 通過git add把工作區添加到暫存區,然後通過git commit把暫存區提交到分支

2.3 管理修改

(1) 第一次修改àgit addà第二次修改àgit commit,這樣的操作過程只能提交第一次修改過程到分支,不能提交第二次的修改

(2) 第一次修改àgit addà第二次修改àgit addàgit commit

通過命令git diff HEAD – readme.txt查看工作區與版本庫的區別

2.4 撤銷修改

(1) 通過命令git checkout -- file可以丟棄工作區的修改

通過該命令對file文件在工作區的修改全部撤銷,存在兩種情況:

a. 修改後還沒有被放到暫存區,撤銷修改就回到版本庫時的狀態

b. 修改添加到暫存區後,又對文件作了修改,撤銷修改就回到添加到暫存區後的狀態

其中,git checkout -- file命令中的--很重要,如果沒有--,就變成了切換到另一個分支。

(2) 用命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區。git reset命令既可以回退版本,也可以把暫存區的修改回退工作區

回退版本的命令:git reset --hard HEAD^ 或 git reset --hard commit_id

(3) 如果修改添加到暫存區,則先通過git reset HEAD <file>撤銷到工作區,然後通過git checkout -- <file>撤銷修改

2.5 刪除文件

如果把工作區的文件提交到暫存區後,手動刪除文件,存在兩種操作:誤刪或需刪除文件

若是誤刪,則用命令git checkout -- <file>恢復

若需要刪除文件,則git rm <file>刪除,然後提交git commit

3. 遠程倉庫

Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密,關聯遠程倉庫需要以下步驟的設置:

(1) 創建SSH Key,會在.ssh目錄下存在id_rsa和id_rsa.pub兩個文件:

ssh-keygen -t rsa -C ‘[email protected]

其中id_rsa是私鑰,id_rsa.pub是公鑰

(2) 登錄GitHub,打開Settings中的SSH and GPG keys,添加id_rsa.pub的內容到SSH keys中

3.1 添加遠程庫

(1) 關聯本地倉庫到遠程倉庫

git remote add origin [email protected]:github_username/learngit.git

其中遠程庫的名字是origin

(2) 本地倉庫所有內容推送到遠程上

git push -u origin master  (第一次推送)

每次本地提交後,使用git push origin master推送最新修改

3.2 遠程倉庫克隆

遠程倉庫的克隆

git clone [email protected]:github_username/repository_name.git

4. 分支管理

4.1 創建與合併分支

(1) 創建dev分支,並切換到dev分支:

git checkout -b dev

其中-b參數表示創建並切換,相當於以下兩條命令:

git branch dev
git checkout dev

(2) 通過命令git branch列出所有分支,當前分支會標一個*號

(3) 分支的合併操作

通過命令git merge dev,合併master到dev中。git merge命令用於合併指定分支到當前分支

(4) 合併後可以刪除dev分支,命令git branch -d dev

4.2 衝突解決

(1) master和創建的分支都有提交,如圖所示

(2) Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容

(3) 對合並的結果提交

git add <file>
git commit -m ‘conflict fixed’

(4) git log --graph --pretty=oneline --abbrev-commit查看分支的合併情況

4.3 分支管理策略

如果禁用Fast forward,需要添加參--no-ff

命令爲git merge --no-ff -m ‘message’ dev

合併之後通過命令git log --graph --pretty=oneline --abbrev-commit查詢

團隊合作中的分支合併情況

Git分支十分強大,在團隊開發中應該充分應用。

合併分支時,加上--no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。

4.4 BUG分支

Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作,通過命令git stash儲藏起來,然後在其他分支上工作,最後通過git checkout name切換到儲藏的分支。

(1) 通過命令git stash list查看儲藏的工作區存放在哪裏

(2) Git把stash內容存在某個地方,需要恢復有兩個辦法:

一是用git stash apply恢復,但是恢復後,stash內容並不刪除,你需要用git stash drop來刪除;

另一種方式是用git stash pop,恢復的同時把stash內容並刪除

4.5 Feature分支

開發一個新feature,最好新建一個分支;

如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除

4.6 多人協作

(1) 查看遠程遠程庫的信息,命令爲git remote

(2) 用git remote -v顯示更詳細的信息,上面顯示了可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址

(3) 推送分支,通過命令git push origin master

4.7 Rebase

Rebase操作的特點:把交叉的提交歷史整理成一條直線,看上去更加的直觀。缺點是本地分叉提交已經被修改。

Rebase操作可以把本地未push的分叉提交歷史整理成直線。

Rebase的目的是使得查看歷史提交的變化時更容易,因爲分叉的提交需要三方對比。

5. 標籤管理

發佈版本時,通常爲版本庫打標籤(tag),也就確定打標籤版本,標籤設計版本庫的快照。標籤與分支都是指針形式存在,但分支可以移動,標籤不能移動。

5.1 標籤創建

(1) 查看所有版本的標籤

git tag

(2) 創建標籤,首先通過命令git checkout u_branch切換到指定的分支,然後通過git tag 版本號。即
 

git checkout u_branch
git tag v1.0

(3) 對指定commit id添加標籤

git tag v1.0 commit_id

(4) 查看標籤的信息

git show <tagname>

(5) 創建帶有說明的標籤,-a指定標籤名,-m指定說明文字

git tag -a v1.0 -m ‘<description>’ commit_id

5.2 標籤操作

(1) 刪除標籤

git tag -d <tagname>

(2) 標籤只存儲在本地,不會自動推送到遠程。如果想把標籤推送到遠程,則

git push origin <tagname>

或者一次性推送全部本地標籤

git push origin --tags

(3) 刪除遠程標籤,先刪除本地,在遠程

git tag -d <tagname>
git push origin :refs/tags/<tagname>

6. Git自定義

6.1 Git特殊文件的忽略

添加.gitignore文件,在文件中指定需要忽略的文件名或類型。

如果想提交忽略的文件,可以強制提交

git add -f <ignore_file>

6.2 Git服務器搭建

(1) 在Linux服務器上安裝Git服務。

(2) 創建證書登錄:收集所有用戶的公鑰,把所有公鑰導入到/home/git/.ssh/authorized_keys文件裏,用戶的公鑰文件爲id_rsa.pub。

(3) 選擇目錄作爲Git倉庫,初始化一個裸倉庫

git init --bare sample.git

(4) 然後就可以通過以下命令:

git clone git@server:/<git_content>/sample.git

 

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