SlideShare a Scribd company logo
1 of 87
Download to read offline
連哈秋都懂的Git教學
2015/10/04@HTCG
hydai<hydai@gapp.nthu.edu.tw>
投影⽚片授權
• CC by-nc 3.0
• 你可以分享、改作
• 不能拿去做商業運⽤用喔!
• creativecommons.org/licenses/by-nc/3.0/tw/
哈秋是誰?
我實習公司的貓貓
好萌好可愛
喜歡⽤用側邊磨蹭
好萌好可愛
會指揮貓奴跟他玩或進貢⻝⾷食物
好萌好可愛
hachu.cat
潛規則
DEMO 失敗要記得⿎鼓掌(X)
⼝口誤都是事先 set 好的(X)
廢話太多可以⽤用眼神打斷我(X)
歡迎多問問題(O)
先來做⼀一下調查
⽤用過 Git 的舉⼿手
聽過 Git 的舉⼿手
你有過這種經驗嗎?
⽼老師說:
基礎功能完成以後,
可以繼續做加分功能
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
來源:
寫程式?那些⽼老師沒教的事
2012/07/15 @StudyArea-Taichung
畢⽟玉泉 (⼩小畢/CrBoy) <crboy@crboy.net>
做 Project 的時候
有時候就不是⼀一個檔案的事了
最初的資料夾
沒想到有 Bug 只好標⽰示⼀一下
解掉 Bug 了,複製⼀一份新的⽐比較安全
F**K ⼜又有 Bug 了,再來⼀一份
不⾏行,我忘記哪個是最新的了,加上版本號好了
版本越來越多
終於 Final 版出來了
有 Bug 我再繼續修
Final 後還有 Final…
有時候有更多的 Final…
做 Project 的時候
有時候也不是⼀一個⼈人的事了吧(?)
多⼈人協作的時候怎麼辦?
A ⽅方案:
我們各改各的,最後再來融合
功能融合不起來?!!!
功能融合不起來?!!!
G_G
B ⽅方案:
別怕,只要⽤用 Dropbox 同步
我們就可以同時改⼀一份 Code
你他O的把我的 Code 蓋掉啦?!
你他O的把我的 Code 蓋掉啦?!
G_G
所以我們想解決什麼?
⺫⽬目標
隨時可以回到純真年代,在 Code 被修改之前
協作時, Code 不會意外的被蓋掉
容易找戰犯 我是說可以查詢歷史紀錄
可以控管很多很多種版本(交作業⽤用、借⼈人抄⽤用)
版本控制系統因⽽而誕⽣生
Version Control System
Repository -> 數據庫,紀錄歷史的地⽅方
Local -> 本地端,通常個⼈人使⽤用的地⽅方
Remote -> 遠端,通常是⼀一個共⽤用的伺服器
在介紹前,先看看專有名詞
VCS ⼤大體可以分兩種
Centralised VCS
Repository
Server (remote)
Copy
User#1
Copy
User#2
commit
update commit
update
Distributed VCS
Repository
Server (remote)
Copy
User#1
Copy
User#2
Repository Repository
Push
Pull
Push
Pull
Update Commit Update Commit
Local Local
今天的主⾓角 - Git
Distributed VCS
Repository
Server (remote)
Copy
User#1
Copy
User#2
Repository Repository
Push
Pull
Push
Pull
Update Commit Update Commit
Local Local
⼤大概像是⼀一位歷史學家
git <command> [arguments]
git <command> --help 看到指令的提⽰示
⼀一招⾛走天下
切換到你想要做版本控制的地⽅方
打上 git init
這位歷史學家就會進駐囉!
建⽴立 Repository
當已經有歷史存在時,可以把過去的歷史繼承下來
git clone <url>
就可以把別⼈人的 repo 複製⼀一份下來囉
已經存在的 Repository
很安全的基礎指令
查看⺫⽬目前狀態: git status
查看歷史紀錄: git log
查看檔案差異: git diff
查看特定紀錄: git show
Git 寫歷史的流程
來源:
http://git-scm.com/about/staging-area
當前的⼯工作環境
數據庫
準備進⼊入數據庫的階段
將修改放⼊入 Stage 階段
git add <file/folder>
git add -A #⼀一次加全部,但是要⼩小⼼心
將修改移出 Stage 階段
git rm --cached <file>
git rm -r --cached <folder>
將修改放⼊入 repository
git commit -m "message"
適合 commit message 很短的時候
git commit -a
將打開互動式編輯器,寫上 commit message
存檔離開以後就完成啦!
commit message 錯誤範例
commit message 建議習慣
第⼀一⾏行是主題,盡量在五⼗十個字元內寫完
空⼀一⾏行
第三⾏行是細節,解釋更多資訊
盡量⼀一⾏行不要超過七⼗十⼆二的字元
Git 寫歷史的狀態
來源:
https://ihower.tw/git/basic.html
不想被加進去的檔案
寫進去 .gitignore 的檔案中
通常我們不會把以下檔案放進去 repo 中
暫存檔案
個⼈人設定檔案
編譯產⽣生的檔案
很棒的 gitignore 整理:https://github.com/github/gitignore
今天的配⾓角 - GitHub
GitHub
章⿂魚貓
可以存放 Git 的 repo
強⼤大的 issue tracking system
⼀一⼤大堆開源軟體
學⽣生專案快去⽤用呀~~~
education.github.com/pack
在 GitHub 上建⽴立 repo
git remote <sub-command>
git remote add <remote-name> <url>
設定 remote
git push <remote-name> <branch-name>
推上 remote 吧!
Push 的時候要注意
hint: Updates were rejected because the
tip of your current branch is behind
Push 失敗的訊息
這時候就⽤用等⼀一下要講的 Pull
絕對不要這麼做
git push --force
git pull <remote-name> <branch-name>
pull 其實是 fetch + merge
所以會多出⼀一個點表⽰示與 remote 融合
git pull --rebase 則是會⽤用 rebase 取代 merge
git log 出來的圖會⽐比較好看
從 remote 把最新的版本拉下來吧
通常 pull 有機會遇到這個情況
你跟朋友同時改了同個檔案
然後就 conflict 了
如何解 conflict ?
你可能會看到這個樣⼦子:
<<<<<<<<<<<<< HEAD
XXXXXXXX
=============
OOOOOOOO
>>>>>>>>>>>>> 8gh893sg897wgs897h
如何解 conflict ?
想辦法合併以後就會變成這個樣⼦子:
XXOOXXXX
OOOXXXOO
存檔後就可以繼續 commit 了!
想要修改已經 commit 的東⻄西?
git rebase -i HEAD~X
從某個 commit 開始調整
有請歷史學家~
最後⽤用來傷感情的指令
git blame <file>
可以看到每⼀一⾏行是誰寫的,想賴都賴不掉
如何找戰犯
參考資料
初學⼊入⾨門專⽤用
• 互動式學 Git
• try.github.io
• 詳細教學⽂文+實例操作
• backlogtool.com/git-guide/tw/
• 三⼗十天學 Git 系列
• github.com/doggy8088/Learn-Git-in-30-days
參考資料
• 寫程式?那些⽼老師沒教的事
• blog.crboy.net/2012/04/release-slides-of-
code-smart.html
• ihower Git 教材
• ihower.tw/git/basic.html
• git-scm
• git-scm.com/about/staging-area
有趣的⼩小東⻄西
• git-fire!!!
• github.com/qw3rtman/git-fire

More Related Content

What's hot

網頁三本柱之Html與css
網頁三本柱之Html與css網頁三本柱之Html與css
網頁三本柱之Html與cssAaron King
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門Tomohiko Himura
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹Max Ma
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうTakuya Ueda
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門to_ueda
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーSaeko Yamamoto
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩Ayana Yokota
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
深入淺出RWD自適應網頁設計
深入淺出RWD自適應網頁設計深入淺出RWD自適應網頁設計
深入淺出RWD自適應網頁設計Marie Chang
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
Learning Git and GitHub - BIT GDSC.pdf
Learning Git and GitHub - BIT GDSC.pdfLearning Git and GitHub - BIT GDSC.pdf
Learning Git and GitHub - BIT GDSC.pdfJayprakash677449
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略Lucien Lee
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門Muyuu Fujita
 

What's hot (20)

Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
網頁三本柱之Html與css
網頁三本柱之Html與css網頁三本柱之Html與css
網頁三本柱之Html與css
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
Git and Github Session
Git and Github SessionGit and Github Session
Git and Github Session
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
深入淺出RWD自適應網頁設計
深入淺出RWD自適應網頁設計深入淺出RWD自適應網頁設計
深入淺出RWD自適應網頁設計
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
Learning Git and GitHub - BIT GDSC.pdf
Learning Git and GitHub - BIT GDSC.pdfLearning Git and GitHub - BIT GDSC.pdf
Learning Git and GitHub - BIT GDSC.pdf
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
 
いつやるの?Git入門
いつやるの?Git入門いつやるの?Git入門
いつやるの?Git入門
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門
 

Similar to 連哈秋都懂的Git教學

大家應該都要會的工具 Git 從放棄到會用1-基礎篇
大家應該都要會的工具 Git   從放棄到會用1-基礎篇大家應該都要會的工具 Git   從放棄到會用1-基礎篇
大家應該都要會的工具 Git 從放棄到會用1-基礎篇Alan Tsai
 
大家應該都要會的工具 Git 從放棄到會用2-分支篇
大家應該都要會的工具 Git   從放棄到會用2-分支篇大家應該都要會的工具 Git   從放棄到會用2-分支篇
大家應該都要會的工具 Git 從放棄到會用2-分支篇Alan Tsai
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1Alan Tsai
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTreeChu-Siang Lai
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報Bachue Zhou
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹PingLun Liao
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final Paul Chao
 
Git and git hub
Git and git hubGit and git hub
Git and git hub唯 李
 
Git流派與工作流程.pptx
Git流派與工作流程.pptxGit流派與工作流程.pptx
Git流派與工作流程.pptx健誠 呂
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan Chang
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgitRhythm Sun
 
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)flylon
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程gemron
 

Similar to 連哈秋都懂的Git教學 (20)

大家應該都要會的工具 Git 從放棄到會用1-基礎篇
大家應該都要會的工具 Git   從放棄到會用1-基礎篇大家應該都要會的工具 Git   從放棄到會用1-基礎篇
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
 
大家應該都要會的工具 Git 從放棄到會用2-分支篇
大家應該都要會的工具 Git   從放棄到會用2-分支篇大家應該都要會的工具 Git   從放棄到會用2-分支篇
大家應該都要會的工具 Git 從放棄到會用2-分支篇
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
Git
GitGit
Git
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 
Git入門介紹
Git入門介紹Git入門介紹
Git入門介紹
 
Git流派與工作流程.pptx
Git流派與工作流程.pptxGit流派與工作流程.pptx
Git流派與工作流程.pptx
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
 
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程
 

More from hydai

Introduction to Ewasm - crosslink taipei 2019
Introduction to Ewasm - crosslink taipei 2019Introduction to Ewasm - crosslink taipei 2019
Introduction to Ewasm - crosslink taipei 2019hydai
 
Introduction to ewasm
Introduction to ewasmIntroduction to ewasm
Introduction to ewasmhydai
 
Lity - 讓你更安全的 Smart Contract Language
Lity - 讓你更安全的 Smart Contract LanguageLity - 讓你更安全的 Smart Contract Language
Lity - 讓你更安全的 Smart Contract Languagehydai
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺hydai
 
Vim 由淺入淺
Vim 由淺入淺Vim 由淺入淺
Vim 由淺入淺hydai
 
Slack&typora
Slack&typoraSlack&typora
Slack&typorahydai
 

More from hydai (6)

Introduction to Ewasm - crosslink taipei 2019
Introduction to Ewasm - crosslink taipei 2019Introduction to Ewasm - crosslink taipei 2019
Introduction to Ewasm - crosslink taipei 2019
 
Introduction to ewasm
Introduction to ewasmIntroduction to ewasm
Introduction to ewasm
 
Lity - 讓你更安全的 Smart Contract Language
Lity - 讓你更安全的 Smart Contract LanguageLity - 讓你更安全的 Smart Contract Language
Lity - 讓你更安全的 Smart Contract Language
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
 
Vim 由淺入淺
Vim 由淺入淺Vim 由淺入淺
Vim 由淺入淺
 
Slack&typora
Slack&typoraSlack&typora
Slack&typora
 

連哈秋都懂的Git教學