<style>
.reveal {
font-size: 28px;
font-weight: 300;
color: #ccc;
}
.reveal .slides {
text-align: left;
}
.reveal section img {
border: none;
}
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.6;
}
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
text-transform: none !important;
color: white;
}
.reveal h1, .reveal h2, .reveal h3 {
padding-bottom: 3rem;
}
.reveal blockquote {
width: 90%;
}
.reveal table {
border: 1px solid;
}
.content-between {
display: flex;
align-items: center;
justify-content: space-around;
}
.blockman {
display: block;
margin-left: 140px;
}
</style>
# 快速上手 Git
Jeffery @ Evolutive Labs
---
### 大綱
- 如何開始使用
- 如何提交 Commit
- 什麼是 Commit
- 如何建立 Branch
- 常見情境
- 如何分享專案
- Flow 介紹
---
### 如何開始使用
---
### 安裝 Git 指令
其他系統安裝可到[官網](https://git-scm.com/downloads)查看
- Ubuntu 系統
```=
apt-get install git
```
- MacOS 系統
```=
brew install git
```
---
安裝完後就可以在終端機打 git 指令

---
### 開始用 Git 版控
第一步、建立資料夾
```=
mkdir git-demo
```
第二部、git 初始化
```=
git init git-demo
```
這樣就可以讓 Git 幫你做版控
---
打開資料夾後並不是空的

---
### 環境參數設定
---
#### 設定姓名/信箱
在提交 Commit 才會知道作者是誰
```=
git config --global user.name jeffery
git config --global user.email jeffery.l@evolutivelabs.com
```
---
#### 設定指令別名
在操作指令可以少打幾個字
```=
git config --global alias.st status
```
---
#### 設定完可以看到設定
```=
# 查看 local 設定
git config --local --list
# 查看 global 設定
git config --global --list
```
---
這是我目前在用的設定

---
### 如何提交 Commit
---
先來認識提交前的三個狀態狀態
- Untracked files (未被追蹤的檔案)
- Changes not staged for commit (被更動尚未提交)
- Changes to be committed (將要提交的檔案)
---
讓我們來提交第一個 Commit 就更清楚了
---
第一步、新增 `read.md` 檔案

---
第二步、加入追蹤 `git add .`

---
第三步、提交檔案

---
第四步、查看提交紀錄 `git log`

---
第五步、修改已加入 git 追蹤的檔案

---
讓我們來回顧剛剛操作過的指令
```=
# 查看檔案追蹤狀態
git status
# 加入追蹤
git add .
# 提交修改內容
git commit -m <message>
# 查看提交紀錄
git log
```
---
### 什麼是 Commit ?
---
- Commit 只紀錄修改內容,並不是紀錄完整的程式碼

---
- 每一個 Commit 都有自己唯一的身分證

---
有了身分證就可為所欲為的想回朔版本或開分支等等都可以~
P.S 建議交付程式給其他公司,記得要把移除 Git,不然你不小心提交機密性資料庫連線資訊、或第三方的 secret 就會被別人取得。
---
### 如何建立 Branch
---
先來了解什麼是 Commit Tree
---
#### Commit Tree
- 在 Git 裡面,每一個 commit 都是一個節點,當把這些節點一個一個串起來
- 每一個節點(commit id),都可以另外長出自己的分支
```=
o---o---o feature 2
/
o---o---o---o---o---o---o---o---o---o---o develop
\ /
o---o---o---o feature 1
```
---
讓我們建立第一分支就清楚了~
---
第一步、查看分支
`git branch`

---
第二步、建立分支
`git branch <branch name>`
預設是從當下分支最新的 commit 切出去

---
從指定的 Commit 建立分支
`git branch <branch name> <commit id>`
---
第三步、切換分支
`git checkout <branch name>`

---
建立完後也可以刪除分支
`git branch -D <branch name>`
---
**特別注意**
- 刪除分支並不是把 Commit 都刪掉,只是把該 Commit 的分支標籤撕掉
---
### 常見情境
---
#### 情境ㄧ、不想追蹤特定檔案
新增 .gitignore 檔案,把該目錄想忽略的檔案路徑寫在該檔案裡面

---
#### 情境二、刪除已被 git 追蹤的檔案
`git rm --cached <file>`

---
#### 情境三、修改已經提交的訊息
第一步、還原尚未提交狀態
`git reset --soft HEAD^`
第二步、再提交訊息
`git commit -m <message>`
---
#### 情境四、返回前一個版本
`git revert <commit id>`

---
#### 情境五、使用 merge 合併分支
第一步、切到目的地分支
`git checkout master`
第二步、合併來源分支
`git merge develop`
---
除了合併沒有的 commit 之外還有 merge commit

---
#### 情境六、使用 rebase 合併分支
第一步、切到目的地分支
`git checkout master`
第二部、合併來源分支
`git rebase develop`
---
就不會多 merge commit,紀錄較乾淨

---
#### 情境七、使用 rebase 合併 commit
第一步、複製要合併前的 commit id
第二步、重新定義節點
`git rebase -i <commit id>`
---

---
### 如何分享專案
---
在遠端庫(GitHub、GitLab、Bitbucket)建立專案

---
與遠端庫建立連線

---
查看遠端設定
`git remote -v`

---
將本地分支推送到遠端
`git push -u <remote name> <branch name>`

---
到這邊就順利把專案丟上雲端,可以分享給別人
`git clone git@bitbucket.org:jefferyleel/git-demo.git`
---
在 PUSH 過程中可能會遇到無法 ssh 權限不足或需要打帳密的遠端連線問題
---
#### Repository URL
- HTTPS:每次上傳 code 的時候,都要輸入一次 username、password
- SSH:只要設定好一次之後,就不用再輸入帳號/密碼了
---
#### 透過 SSH 如何連線?
- SSH 跟 Bitbucket 建立連線是透過 RSA 加密演算法
- RSA 金鑰是一對(一把私鑰 + 一把公鑰),公鑰給 Server,私鑰存放在自己電腦
---
公私鑰匹配連線成功

---
#### 如何產生公私鑰
1. 使用 ssh-keygen 產生公私鑰
`ssh-keygen -t rsa`
2. 將公鑰上傳到 Server
`cat ~/.ssh/id_rsa.pub`
---
### Flow 介紹
---

---
## Q&A
{"metaMigratedAt":"2023-06-15T17:52:44.479Z","metaMigratedFrom":"YAML","title":"快速上手 Git","breaks":true,"contributors":"[{\"id\":\"5344d19f-c240-4fe4-bd63-c70af739e6c4\",\"add\":6045,\"del\":794}]"}