講者: 黃致維
人生不能重來但是 Git 可以
程式不只一個人在開發
狀況一
程式改壞了怎麼辦?
狀況二
或是可以看一下 官網 上的說明
$ git config --global user.name "你的名字"
$ git config --global user.email "你的 email"
$ git init
專案根目錄
專案根目錄
開始寫 code
專案根目錄
$ git add file1
$ git add file2
stage
$ git status
專案根目錄
$ git commit -m "加入了兩隻檔案"
commit: 加入了兩隻檔案
$ git log
$ git reset --hard HEAD^
$ git reset --hard HEAD~1
$ git reset --hard e2a9357a862b4bbb37257dc3e36bc60932bbfcdd
$ git diff
$ git checkout .
$ git add .
將所有的檔案加入 暫存區 (stage)
如果有檔案不想加入 Git 追蹤
.gitignore
新增 .gitignore 的檔案,並將不想加入追蹤的檔案路徑加入就可以了
新增 .gitignore 的檔案,並將不想加入追蹤的檔案路徑加入就可以了
分身要是被打爆了,並不會影響到本體
當真正開始在專案上走一次流程時
實際上情形會是這樣
當專案的開發人數一多
branch 與 commit 沒有良好的規範
碰到剛剛圖片上的情景,是早晚的
所以事先定義好良好的 規範 是十分重要的
代碼模組化
Branch 的流程與規範
Git Flow
在 2010 年的時候,就有人提出了一套流程,或說是訂了一套規矩讓大家可以遵守:參考網址
一定要明確的告訴隊友或是自己
這個 commit 是為了什麼
<type>(project):#ticketnumber subject
可用的 type 標籤
實際範例
分享你的 Git 專案吧
通常我們會把一個 Git 的專案稱為: Repository 版本庫
另外我們會將 Git 的 版本庫放置到
擁有 Git 介面的雲端空間
應用程式
網站
$ git remote add origin [URL]
設定要連結雲端上的版本庫的 URL
$ git push -u origin master
本地 master 的 branch
推上
雲端 master branch
$ git push
$ git push origin [branch 名稱]
$ git clone {URL}
$ git pull
pull = fetch + merge
將最新的 commit 拉到本地端
解決衝突後,在做 push 的動作
$ git push -f
本來不想用這招的
他跟其他版本控制系統的差別在哪了
紀錄了每個版本直接變更的差異
最後用組合的方式拼湊除當前的結果
Blob
Blob
Commit
Tree
Blob
A.txt
B.txt
C.txt
lib 資料夾
first commit
HEAD
Blob
A.txt
C.txt
lib 資料夾
first commit
修改了 B 的檔案
B.txt
Tree
Blob
Blob
Commit
HEAD
Blob
B.txt
Commit
Blob
Commit
Blob
A.txt
B.txt
C.txt
lib 資料夾
first commit
修改了 B 的檔案
B.txt
Tree
Blob
Blob
Commit
HEAD
$ git reset --hard HEAD^
重新設定
GO TO
Commit
Blob
A.txt
B.txt
C.txt
lib 資料夾
first commit
修改了 B 的檔案
B.txt
Tree
Blob
Blob
Commit
HEAD
Blob
Blob
A.txt
C.txt
first commit
Tree
Blob
Blob
B.txt
Commit
HEAD
master
$ git branch branch1
新增 branch
Blob
A.txt
C.txt
first commit
Tree
Blob
Blob
B.txt
Commit
HEAD
master
branch1
$ git checkout branch1
切換 branch
Blob
A.txt
C.txt
first commit
Tree
Blob
Blob
B.txt
Commit
HEAD
master
branch1
Blob
A.txt
C.txt
lib 資料夾
first commit
修改了 B 的檔案
B.txt
Tree
Blob
Blob
Commit
HEAD
Blob
B.txt
Commit
master
branch1