git倉庫管理、工作流程、遠程操作、分支管理、基本命令

本文爲git代碼管理及命令操作的入門知識,講述內容包括倉庫管理、clone+fetch+pull+push的流程、遠程操作、常規命令等。請批評指正。

第一部分:基礎概念(針對新手,使用過git的請跳過)

1.1 git與github的區別

git是版本控制工具,藉助此工具可以在本地倉庫、公司git服務器或者開源免費的github遠程倉庫上管理軟件版本。在多人協作的項目開發工作中十分普及。

github是免費的開源遠程倉庫。通俗點,就是有個免費的遠程服務器(遠程倉庫),可以管理你的代碼;如何與這個遠程倉庫進行交互,就需要靠git了。

1.2 本地倉庫、遠程倉庫的區別

倉庫repository就是管理項目代碼的地方。顧名思義,本地倉庫即存儲路徑在本地的倉庫;遠程倉庫即通過ssh、https協議等連接進行管理的倉庫。常見的遠程倉庫有公司自建的git服務器、github等。

1.3 分支branch的概念

分支概念示意圖

                                                                                    圖片引用自,如有需要,請查看原圖

如上圖,同一個項目需要多人協作,每人有不同的分工,所以就創建了不同的分支。在B處創建3個分支,最開始大家的代碼都是一樣的。然後每人各自在此基礎上進行各自的工作,互不干擾。每個分支的代碼就開始慢慢有些區別,然後就要進行合併,根據需要合併到對應的分支上(或者master)上,以滿足項目需要求。

2 工作流程

                                                                           圖片引用自阮一峯的網絡日誌,如有需要,請查看原圖

圖中,Remote指遠程倉庫,Repository指本地倉庫,workspace指工作區(按照本圖意思,workspace更像是分支,但又不太對),Index指緩存區。常見的工作流程如下:

<1> 在本地倉庫上新建一個分支,默認有個master分支
<2> 在該分支上進行相應的修改操作等,操作完利用add將修改提交到index, 利用commit提交到本地倉庫
<3> 本地倉庫可以利用clone從遠程倉庫直接克隆整個代碼庫;或者利用fetch只抓取更新,並利用merge合併
<4> 本地倉庫也可以利用pull拉取遠程倉庫的分支(獲取他人更新的代碼)
<5> 本地倉庫修改後的代碼可以push到遠程倉庫上

注:本人也是菜鳥,對這個圖理解的不透徹,望懂得人指導下。按照我的理解,workspace應該是分支,
   但好像又不對。相信阮老師,他應該不會錯的。只是我能力不夠,理解不了。後期如果懂了,再更新。

 

3 本地倉庫操作

(安裝git,創建個人github賬戶後)從0開始的時候,首先要創建本地倉庫。

#git init會默認創建master分支(應該理解爲主支、主幹)
#在當前目錄新建倉庫
$ git init
#創建新的目錄,並初始化爲代碼庫
$ git init [project name]
# 將遠程倉庫的代碼clone進來
$ git clone [***.git]//可以使用https協議、ssh協議。不懂可以參考github上給的指令。

git init也可以更新當前已有的倉庫。創建後可以發現當前目錄裏存在.git目錄。

3.1 文件的操作

# git add系列用於將workspace分支中的文件添加到index暫存區(用語就以上圖爲例)
git add . //將當前目錄中的文件提交到緩存區,此後同類文件的更改並不會commit到對應分支。
git add [filename]//同理,只是針對文件
git add [directory name]//同理,將遞歸將目錄連同子目錄添加到暫存區
git add -u //只加修改過的文件,新增文件不加入
git add -i //交互式處理
# git rm系列用於刪除index暫存區的文件
git rm [filename]
# 重命令
git mv [old name] [new name]

3.2 提交到本地倉庫

#提交緩存區的文件至本地倉庫
$ git commit -m [message] //message 爲標註信息,可不加
# 將所有修改後的文件全部提交
$ git commit -a
# 提交時展示對應的信息
$ git commit -v
# 提交至定的文件至本地倉庫
$ git commit [files]

4 分支的創建與管理

剛纔說到git init創建本地倉庫的時候自動創建master分支。但是多人操作不能只在一個分支上幹活,於是有分支的創建與管理

4.1 新建、刪除分支

#列出當前所有branch
$ git branch
#創建新的branch
$ git branch [branch name] //沒有特別指定, 會由目前所在的branch直接複製
$ git branch [branch name] master //由master複製出新的branch
#刪除branch
$ git branch -d [branch name] //刪除branch
$ git branch -D [branch name] //強制刪除branch
$ git checkout -b [branch name] //產生新的branch, 並同時切換過去
#與remote repository有關
$ git branch -r //列出所有Repository branch
$ git branch -a //列出所有branch

4.2 切換分支

#切換到branch-name
$ git checkout [branch-name] 
#以現在的環境爲基礎, 建立新的branch
$ git checkout -b [newbranch] 

5 本地倉庫、遠程倉庫的交互

local repository 與remote repository的交互,主要用處有:本地修改完代碼,提交到遠程倉庫上;合併多分支的代碼;將遠程最新的代碼拉到本地等。常用指令有clone, pull, fetch, push, merge等(merge是用於不同分支之間的)

5.1 clone

#克隆版本庫,一條龍複製倉庫、版本、分支等
$ git clone [url]
#克隆版本到指定目錄
$ git clone [url] [dir]

5.2 remote

git remote 用於指定遠程主機的名字,用於管理遠程主機;方便管理,不然每次好長的名字

# 列出所有遠程主機
$ git remote
# 查看遠程主機的網址
$ git remote -v
# 查看主機詳細信息
$ git remote show [host-name]
# 添加遠程主機
$ git remote add [host-name] [url]
# 刪除遠程主機
$ git remote rm [host-name]

5.3 fetch

當遠程倉庫有更新時,利用fetch將更新同步到本地,切記只更新,不合並;合併需要使用merge

# 將倉庫所有更新全部取回本地
$ git fetch [host-name]
# 將遠程主機的特定分支更新到本地
$ git fetch [host-name] [branch-name]
# 查看遠程分支
$ git branch -r
# 查看所有分支
$ git branch -a

5.4 merge / rebase

5.3是隻更新沒合併,這樣遠程倉庫的修改行爲是無法反映到本地倉庫的,接下來就是合併了

#將遠程主機hostname上的branchname分支合併到當前分支,兩條指令都可以
$ git merge hostname/branchname
$ git rebase hostname/branchname

5.5 pull

git pull相當於先從遠程倉庫上更新,再合併。就是先操作git fetch ,再操作git merge

# 取回遠程主機的分支更新,並與本地指定分支合併
$ git pull origin next:master //將origin主機的next分支更新併合併到本地的master分支
# 與當前分支合併時,可省略冒號後面的目標分支
$ git pull origin dev //將origin的dev分支更新併合併到當前分支
# 手動指定(追蹤)本地分支與遠程分支的關聯
$ git branch --set-upstream-to=origin/next //當前分支關聯到遠程origin/next分支
# 如果當前分支與遠程分支存在關聯關係,git pull可以省略遠程分支名,如:
$ git pull origin //系統會讀取到跟蹤關係,所以對應的分支名是可以省略的


# 當遠程主機刪除某個分支時,默認情況下,git pull 不會在拉取遠程分支的時候刪除本地倉庫的對應分支。
# 但可以改變這個行爲,加上參數 -p,如下:
$ git pull -p //當遠程刪除某個分支時,本地倉庫會同步刪除

5.6 push

將本地更新推送到遠程主機上

# 本地分支的更新推到遠程主機
$ git push [hostname] [local-branch]:[remote-branch]
$ git push origin src:dst //將本地的src分支推送到遠程origin的dst分支
# 若省略遠程分支名,則表示將本地分支推送到關聯的遠程分支上;若該遠程分支不存在,則會被新建
$ git push origin dev //本地dev分支推送到遠程origin的dev分支;若dev不存在,則會被新建
# 不管是否存在遠程分支,都可以將本地分支推到遠程主機
$ git push --all origin //本地分支都推送到origin主機

言盡及此。面向新手,本文主要講述git的基本工作流程及基本指令,本人也是入門,如有錯誤,請批評指正。

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