SlideShare a Scribd company logo
Claire Chang
Git版本控管實戰 課程分享
為什麼想去上課
❖ 導入GIT後在mobile2.0開發完成要合併時發⽣嚴重衝突
❖ 整體開發流程上尚未建⽴⼀致的流程概念
❖ 因⾃⼰和團隊對GIT不熟悉,導致容易在操作GIT時因操
作錯誤產⽣問題,並且在遇到問題時不知該如何解決
❖ 現有的GIT線圖混亂⽽難以辨視,讓GIT的優點無法在團
隊內發⽣效果(反⽽比SVN時代更難理解)
這次分享的⽬標
❖ 建⽴⼀套操作GIT的標準流程規範(包括統⼀PULL⽅
式,與Designer的合作模式,分⽀合併策略的統⼀等
等)
❖ 提升團隊成員對GIT的了解度,使團隊減少因操作問題⽽
發⽣的錯誤
❖ 讓團隊的GIT分⽀圖能夠更易於理解與辨視
Git版本管理控管實戰
<< 終極⽬標
分散式版本控管
❖ 分為『⼯作區』及『儲存庫』
❖ 本地端⼯作區會有⼀份完整的儲存庫
❖ 沒有.git⽬錄可⽤git init⾃⼰建⼀個
❖ 砍掉.git等於刪除所有版控資訊
❖ 擁有.git⽬錄等於可以隨時復原所有歷史原始碼
Git版本管理控管實戰
儲存庫(Repository)
❖ 本地儲存庫( Local Repository )
❖ 同時包含⼯作⽬錄與儲存庫
❖ 預設位於⼯作⽬錄下的.git 資料夾
❖ 遠端儲存庫( Remote Repository )
❖ 僅儲存庫(Bare Repository)
❖ GitHub / Bitbucket / Visual Studio Team Services / …
❖ 共⽤儲存庫( Shared Repository )
❖ 僅儲存庫(Bare Repository)
❖ 使⽤⽅式跟遠端儲存庫⼀樣
❖ 可以⽤git init--bare建⽴共⽤儲存庫
了解Git 資料結構
❖ 物件( Object )
❖ ⽤來保存儲存庫中所有檔案與版本紀錄( 或稱「物件儲存區」)
❖ 屬於⼀種「不可變的」(immutable) 檔案類型
❖ 區分四種物件類型
❖ blob儲存檔案內容
❖ tree儲存⽬錄內容(儲存⽬錄下有哪些檔名)
❖ commit儲存版本內容
❖ tag儲存標籤內容
❖ 索引( Index )
❖ ⽤來保存要進儲存庫之前的所有檔案狀態
❖ 屬於⼀種「可變的」(mutable) 檔案類型
❖ 主要位於.git/index檔案(⼆進位檔)
❖ 介於物件儲存區(object storage) 與⼯作⽬錄(working directory)
❖ 不在索引中的檔案又稱為untracked files
Git版本管理控管實戰
查看物件ID / 內容/ 類型/ ⼤⼩
❖ 計算物件編號(object id)
git hash-object filename.ext
❖ 查看物件內容(pretty print)
git cat-file -p a023a56eb2870c106ea9b968ece62604c9d81bb1
❖ 查看物件類型(type)
git cat-file -t a023a56eb2870c106ea9b968ece62604c9d81bb1
❖ 查看物件⼤⼩(size)
git cat-file -s a023a56eb2870c106ea9b968ece62604c9d81bb1
Git版本管理控管實戰
問題:
如果有⼀個SHA壓縮後1GB的⽂字檔,今
天修改了裡⾯1byte的內容,commit後git儲
存庫的⼤⼩會增加多少呢︖
儲存庫、⼯作⽬錄與索引的關係圖
顯⽰前幾次在GIT操作過的指令
git reflog
深入了解RESET
❖ 主要⽤途:將當前分⽀復原變更–復原上次認可( Undo
last commit )
git reset HEAD~
❖ 字⾯翻譯:將當前分⽀重置到指定版本–復原至特定版本
git reset 9ac91edf7342c14c3698f27cb4a18ea5727c3d53
問題:TAG與BRANCH有什麼不
⼀樣︖
關於「分⽀」的真正意義
❖ 三維空間(3D) 外加⼀個時間維度可以稱為四維空間(4D)
❖ 分⽀就是⼀個可以讓你標記時間維度的指標
❖ 分⽀是⼀個會隨著時間演進的指標
❖ 標籤則是⼀個不會隨著時間演進的指標
❖ 分⽀在Git 中就是⼀個⽂字檔案紀載著⽬前版本的位置
❖ 「切換分⽀」( Checkout ) 等同於「控制時間維度」
合併(Merging)
❖ ⼀般合併
❖ git merge
❖ git merge —no-ff
❖ git merge —squash
❖ git merge —no-commit
❖ git merge —abort
❖ 正向挑選合併(撿櫻桃)
❖ git cherry-pick
❖ git cherry-pick —continue
❖ git cherry-pick —quit
❖ git cherry-pick —abort
❖ 重新指定基礎位置合併
❖ git rebase
❖ git rebase -i
❖ git rebase —continue
❖ git rebase —skip
❖ git rebase —abort
❖ 反向挑選合併
❖ git revert
❖ git revert —continue
❖ git revert —quit
❖ git revert --abort
合併「不同世界」的分⽀
分⽀合併與衝突處理
其他不同的合併⽅式
保持「⼯作⽬錄」的乾淨清爽
認識detached HEAD 狀態
認識fast-forward
Fast forward
合併之前
no Fast forward
重新認識git pull
❖ 等同於下列命令
❖ git fetch origin <branch>
❖ git merge FETCH_HEAD
保哥的強烈建議
❖ 最好在AD登入時每個⼈都執⾏這個
❖ git config —global pull.ff only
❖ 預設改⽤rebase進⾏合併
❖ 不要把主要分⽀合併到次要分⽀,如果次要分⽀需要更
新主要分⽀的內容,⽤rebase的⽅式,這樣線圖的箭頭才
不會來來回回的很亂
看圖說故事 誰把DEV偷⾛了
Git版本管理控管實戰
Git版本管理控管實戰
重定基底(Rebase)
Rebase DEMO
改善建議
❖ 預設改⽤rebase進⾏合併
git config —global pull.ff only
❖ Branch需要更新dev資料時,使⽤rebase取代merge
❖ dev要合併到qat時,加下—no-ff參數
❖ Designer不實際參與GIT操作
❖ 每個⼈⾃⼰⼀個branch(這邊叫Sena branch好了)
❖ 送交:寫好bat檔,點兩下輸入訊息後⾃動做commit和push。
❖ 取得檔案:要切換到不同的QAT單⼯作時,設計⼀個bat檔,點兩
下後輸入單號,該bat檔會⾃動reset Sena branch,然後rebase到
該單號的HEAD。(將本地端未COMMIT的所有之前的⼯作內容
清空)

More Related Content

Similar to Git版本管理控管實戰 (20)

PDF
Introduction to git
Bo-Yi Wu
 
PDF
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
 
PPTX
Git &amp; git hub v1.2
Chris Chen
 
PPTX
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
Alan Tsai
 
PPTX
Git and git hub
唯 李
 
PDF
Git 簡介(古時候的簡報備份)
Hsin-lin Cheng
 
PPTX
工程師必備第一工具 - Git
Alan Tsai
 
PDF
Git 入门实战
icy leaf
 
PPTX
Git 入門與實作
奕浦 郭
 
PDF
為自己學 Git
昀 李
 
ODP
Git basis - usage
Eason Cao
 
PDF
Git 經驗分享
Mu Chun Wang
 
PDF
Git Tutorial 教學
Wen-Tien Chang
 
PDF
Git tutorial for windows user (給 Windows user 的 Git 教學)
Cloud Tu
 
PPTX
Git初步入門
recast203
 
PDF
Git and Github basic with SourceTree
Chu-Siang Lai
 
ODP
Git 程式碼版本控制軟體介紹
PingLun Liao
 
PDF
版本控制 使用Git & git hub
維佋 唐
 
PDF
Yet another introduction to Git - from the bottom up
Wen-Tien Chang
 
PDF
COSCUP 2015 開源之道-Git工作坊教學簡報
Bachue Zhou
 
Introduction to git
Bo-Yi Wu
 
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
 
Git &amp; git hub v1.2
Chris Chen
 
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
Alan Tsai
 
Git and git hub
唯 李
 
Git 簡介(古時候的簡報備份)
Hsin-lin Cheng
 
工程師必備第一工具 - Git
Alan Tsai
 
Git 入门实战
icy leaf
 
Git 入門與實作
奕浦 郭
 
為自己學 Git
昀 李
 
Git basis - usage
Eason Cao
 
Git 經驗分享
Mu Chun Wang
 
Git Tutorial 教學
Wen-Tien Chang
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Cloud Tu
 
Git初步入門
recast203
 
Git and Github basic with SourceTree
Chu-Siang Lai
 
Git 程式碼版本控制軟體介紹
PingLun Liao
 
版本控制 使用Git & git hub
維佋 唐
 
Yet another introduction to Git - from the bottom up
Wen-Tien Chang
 
COSCUP 2015 開源之道-Git工作坊教學簡報
Bachue Zhou
 

More from Claire Chang (9)

PPTX
我們要做什麼」20230707
Claire Chang
 
PDF
Pixi.js網頁遊戲開發實戰
Claire Chang
 
PDF
ansible
Claire Chang
 
PPTX
薩提爾的對話練習
Claire Chang
 
PDF
從零架設直播伺服器
Claire Chang
 
PPTX
Learn to code 2 - Beyond the Basics
Claire Chang
 
PDF
Ane
Claire Chang
 
PDF
Starling
Claire Chang
 
PDF
Auto layout in i os 7
Claire Chang
 
我們要做什麼」20230707
Claire Chang
 
Pixi.js網頁遊戲開發實戰
Claire Chang
 
ansible
Claire Chang
 
薩提爾的對話練習
Claire Chang
 
從零架設直播伺服器
Claire Chang
 
Learn to code 2 - Beyond the Basics
Claire Chang
 
Starling
Claire Chang
 
Auto layout in i os 7
Claire Chang
 
Ad

Git版本管理控管實戰