開發之路: 高效使用Git
一、Git是什麼
1. 版本控制
- 版本控制是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統。
(版本控制系統VCS:可以理解成一個數據庫,幫助我們完整地保存一個項目的快照)
2. 集中式
- 將項目集中存放在中央服務器中,在工作的時候,大家只在自己電腦上操作,從同一個地方下載最新版本,然後開始工作,做完的工作再提交給中央服務器保存。
- 配置庫是集中存放在中央服務器,開發者需要先從中央服務器取得最新版本,完成後再推送給中央服務
- SVN: 集中式版本控制系統中的代表
- 存在問題:
需要聯網才能工作,從服務器中下載數據,可能會比較慢
3. 分佈式
- 分佈式也有一個類似於“配置庫”的服務器,而作用僅僅是用於交換,有它無它均可繼續開發。
- 與集中式比較
-
(1)個人擁有完整的版本庫,因此無需聯網均可開發
(2)因爲每個人都擁有完整地庫,所有安全性比較高,單個掛了不會影響其他
(3)SVN能清楚的按目錄進行分類管理, 使項目組的管理處於有序高效的狀態
(4) SVN更適用於項目管理, Git適用於代碼管理
3. Git: 分佈式版本控制系統中的代表
-
對比:
二、git,gitlab,github
1. 它們什麼關係
- git- 版本控制工具;
- github - 一個網絡平臺,提供給用戶空間存儲git倉庫,保存用戶的一些數據文檔或者代碼
- gitlab - 基於git的項目管理軟件。
2. 關於gitlab使用
選擇登錄的方式:
Github ,Google賬號登錄
之後,在git 終端上操作,綁定用戶名和email即可操作了
3. Git 三個區
- (1)認識三個區
工作區:就是你在電腦裏能看到的目錄。
暫存區:英文叫stage, 或index。一般存放在 “.git目錄下” 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
HEAD : 指向的分支
git stash命令用於暫時保存沒有提交的工作。運行該命令後,所有沒有commit的代碼,都會暫時從工作區移除,回到上次commit時的狀態。
分支衝突:
Git 標籤
Git config --Group 針對當前用戶
分支合併的方式:
-
Git merge :
-
Git rebase:
三、Git怎麼玩
常用指令
1. Pull 和 Push
- Pull:拉
- Push:推
Pull 是merge 和 fetch的集合,意爲拉取遠程的數據,併合入本分支
Push 是推的意思,把所做的更改推到遠程分支上
git fetch : 與一個遠程的倉庫交互,並且將遠程倉庫中有但是在當前倉庫的沒有的所有信息拉取下來然後存儲在你本地數據庫中
git merge origin/lite_dev:合併分支
Git pull --rebase : 把代碼整到最新
Git fetch origin feature_LongVideo :把遠程分支拉到本地
Git pull origin feature_LongVideo :把某分支內容都拉取到本地
2. Git status
: 查看當前分支的狀態,主要是所做的一些改動
3. Git log
查看提交日誌
4. Git init
初始化
一般多人開發一個需求時是用同一個分支這個時候git pull很有用,我們修bug都是從master新建本地分支,從本地分支pull就會報錯
修bug一般都是git pull origin master
和別人一起開發新需求的時候最好設置一下關聯,方便直接git pull拉取
分支創建/合併
- 查看分支:git branch
- 創建分支:git branch
- 切換分支:git checkout 或者git switch
- 創建+切換分支:git checkout -b 或者git switch -c
- 刪除本地分支:git branch -d
- 刪除遠端分支:git push origin -D
Git checkout: 取消對某文件的修改,將對文件修改撤回
Git reset:回退,將add文件修改內容回退,commit提交不會包含此修改
提交三連
git add
filename:單個文件
. :當前所有文件
git commit -m “message”:提交
git push:將commit推動遠端
提交/回退
-
Git reset --soft
回退到某個版本,只回退了commit的信息,不會恢復到index file一級。如果還要提交,直接commit即可 -
Git reset --hard
徹底回退到某個版本,本地的源碼也會變爲上一個版本的內容,撤銷的commit中所包含的更改被沖掉
回退指的是回退到上一次的變動,比如之前在本分支提交的是“XXX”,然後pull了遠程代碼,本地已經有了新的變動,git reset回退的是這一次的pull
- Git reset
總結來看:
Git 常用命令就拉分支,合分支,解決衝突pull,版本回退,查看提交日誌,版本差異等
本地提交: commit 遠程提交:push
查看 diff
git diff 比較工作區跟暫存區
git diff --cached 比較暫存區跟HEAD
git diff HEAD 比較工作區跟HEAD
修改沒add在工作區,add了沒commit在暫存區,commit了在HEAD,HEAD指向的就是我們的當前分支
四、Git怎麼六起來
主要用什麼?
- Xcode git
“M”意味着改變了代碼,但是還沒有提交git
-
然後run一下,保證代碼無問題之後;就會提升“This is a Git tutorial”
現在程序就是:“known good” 狀態了 -
提交方法:Source Control\Commit
會出現兩個界面,分別對應於修改之後的和原先的 -
新建分支
分支是一種保存一系列Git提交的方式。通過使用不同的分支,你可以將不同功能分隔以減少破壞程序的風險。
高效方向
1. 多用熟能生巧
2. 當然配置一下命令行也是很有必要的,這會讓你事半功倍
3. alias 設置命令快捷
怎麼耍?
熟悉git 命令的人,可以通過git終端命令,完成一系列·的操作
問題一鍵通
- Git reset -hard 回退到某個版本
error: pathspec ’ did not match any file(s) known to git
- 查看remote 倉庫
拉取,推遠程分支
提升:feature_mapLocation 沒有上游分支,當前git check -b 沒有將其推送到遠程分支上
如何查看誰修改
- 第一種方法
Git log 查看提交日誌
分支推送問題
- 提交三連:
之後 git push 提示
使用git在本地新建一個分支後,需要做遠程分支關聯。如果沒有關聯,git會在下面的操作中提示你顯示的添加關聯。
關聯目的是在執行git pull, git push操作時就不需要指定對應的遠程分支,你只要沒有顯示指定,git pull的時候,就會提示你。
然後,我們再:
Merge 遠程分支
Merge 和 pull的區別
查看commit信息
每次提交的信息都一樣,說明沒有push到遠程
說一下push
pull是拉取當前分支到當前所在分支,做的是最新的改動;相當於merge和fetch之和,在這裏說明一下:假如我們要合入其它的分支,那麼我們可以直接merge遠程分支,或者pull下來,在這裏我感覺不到區別
偶見Xcode未同步
在shell,Xcode上都查看了git的提交,顯示都已經提交上去,但是Xcode未同步
(依然提示藍線)
關於版本
- Git tag 查看版本
- 切換到某個版本
切到了一個比較奇怪的分支,detach 分離
默認·標籤是打在最新提交的commit上的
error: src refspec master does not match any.
出現如下錯誤:
error: src refspec master does not match any.
error: failed to push some refs to ‘XXXXXX’
原因:
本地倉庫爲空
拉取遠程分支錯誤
git pull origin bugfix_resource_bundle_master_chn
fatal: Couldn’t find remote ref bugfix_resource_bundle_master_chn
fatal: The remote end hung up unexpectedly
關於head
記住一點就行了HEAD這個指針永遠指向最近一次提交,頭指針分離了除外
Git config --list // 一些配置參數