Git 基礎工作坊
https://slides.com/dmoon/git/live
DMoon
Version Control?
檔案版本的管理方法
講人話.....
備份
想像成遊戲的記錄存檔
Why should I use version control ?
那些coding的痛苦回憶
總有把程式改壞的時候...
趕快瘋狂 Ctrl + Z
hmm 原本應該是這樣子的.......嗎?
或是更聰明的你
瘋狂 Ctrl + Shift + S
It works
Git
分散式版本控制系統
Git 不是 GitHub !!!
Git
-
Since 2005
-
Linus Torvalds
-
免費
-
開源
分散式架構
遠端、本地都能操作
Git 能做什麼?
- 對一個資料夾下的所有檔案做備份管理
- 將檔案的Snapshot(快照)保存到歷史紀錄
- 為每次檔案更動留下說明
- 將檔案復原到某個歷史紀錄
- 顯示不同記錄版本的檔案差異
- 與他人協同合作
找戰犯
還記得遊戲的紀錄點嗎?
git 裡叫做 commit
未保存的變更
已保存的記錄 (commit)
Timeline
環境準備
- 安裝 Git
- 安裝 SourceTree
- 註冊 GitHub
備份三步驟
- 編輯檔案
- 選擇此次版本要存的檔案
- Commit 儲存版本
SourceTree
Init Repository
- File > New / Clone > Create Local Repository
- Enter Destination Path & Project Name
- Type Git
- Create
練習
Create a Git Local Repository
File Status
Commit
History
練習:第一個 Commit
CLI
# set your default info
$ git config --global user.email "name@mail.com"
$ git config --global user.name "userName"
# set info of current git project
$ git config user.name "userName"
# list config
$ git config -l
Tell Git who you are
要學的指令有點多...
重要的是記得有哪些功能!
忘了這邊查 -> Git 命令快速參考
Create a new local repository
# init git in your project directory
$ git init
檔案分類
-
ignored
-
tracked
-
unTracked
ignore
忽略不需要追蹤/記錄的檔案
建立 .gitignore 檔案
.gitignore sample
# 輸入你想忽略的檔案路徑名稱
# ignore ./test.html
test.html
# ignore whole ignore_dir directory
ignore_dir/
# ignore all css file
*.css
Branch
Saving changes
Status
List the files you've changed
and those you still need to add or commit
Add
# add file
$ git add fileName
# add all files
$ git add .
# check added files
$ git status
-
untracked -> tracked
-
add file to Staging Area
remove added file
# untrack & delete tracked file
$ git rm fileName
# only untrack tracked file
$ git rm --cached fileName
commit
# check current status
$ git status
# commit added files
$ git commit
# commit with message
$ git commit -m "Write some message here"
提交一個新的版本
Log
# show git commit histories
$ git log
Commit all tracked files
修改最後一個提交訊息
$ git commit --amend
Ref: HEAD
永遠指向目前分支最新Commit
Diff
# diffs between tracked but unStaged files and HEAD
$ git diff
# diffs between staged files and HEAD
$ git diff --cached
# src and dest can be commitID or branch
$ git diff <src> <dest>
Stash
# 暫存當前工作目錄
$ git stash
# show stash list
$ git stash list
# 還原暫存工作目錄
$ git stash pop
# delete last stash
$ git stash drop
# clear all stash
$ git stash clear
checkout
# switch branch
$ git checkout branchName
# checkout old version commit
$ git checkout <commitID>
切換 HEAD
Undoing Changes
Reset
# reset file to last commit
$ git reset HEAD fileName
# reset all files to last commit
$ git reset HEAD
# reset with option
$ git reset --option HEAD
Reset Option | Work Directory | Staging Area | HEAD |
---|---|---|---|
soft | X | X | O |
mixed (default) | X | O | O |
hard | O | O | O |
Reset Option
O:do reset
X:not reset
Branches
為何要新增 branch?
# list all branches
$ git branch
# create a new branch
$ git branch <branchName>
# switch to another branch
$ git checkout <branchName>
# create a new branch and switch to it
$ git checkout -b <branchName>
# delete the branch
$ git branch -d <branchName>
Branch
Brach 不用錢
開幾個練習看看吧
Merge
Merge
合併分支
# merge a <branchName> into your active branch
$ git merge <branchName>
Conflict
Collaborating
Central Repo
軟體原始碼代管服務
GitHub
全球最大同性交友平台上線啦
Clone project from Repo
# clone a repo
$ git clone <srcRepoPath> <destDirName>
Remote Repository
# connect local repository to a remote repository
$ git remote add <remoteRepoName> <remoteRepoPath>
# list all connected remote repository
$ git remote -v
Syncing
Remote Branch
A's local Branch
B's local Branch
Push
# send changes to the remote branch
# of your remote repository
$ git push <remoteRepoName> <remoteBranchName>
fetch
# fetch the latest history from the server
$ git fetch
# remoteRepoName default origin
# remoteBranchName default master
$ fetch result is in FETCH_HEAD
$ git fetch <remoteRepoName> <remoteBranchName>
Pull
fetch + merge
# fetch and merge remoteBranch to current branch
$ git pull <remoteRepo> <remoteBranch>
Git Flow
Blame
# show file history
$ git blame <fileName>
深入介紹 GitHub
Free for Public Project
Github
Pull Request
-
push your branch to remote
-
create a pull request
-
wait for admin to merge
合併請求
Fork
你可能沒有編輯他人 Repo 的權限
這時可以Fork一份自己權限的 Repo
修改後新增 Pull Request 向原本專案提出合併申請
GitLab
Integration with Editor / IDE
Visual Studio Code
git
By dmoon
git
- 2,242