# Git
---
## Agenda
1. 疑問
2. 事前安裝
3. 什麼是版控
4. Git由來
5. 名詞介紹
6. 基本操作 & 情境模擬
7. Git GUI
8. GitHub
9. Q&A
---
## 有什麼疑問呢?
---
## 事前安裝
---
請安裝以下軟體
1. [Git](https://git-scm.com/)
2. [Source Tree](https://www.sourcetreeapp.com/)
3. [Fork](https://git-fork.com/)
4. [Tortoise Git(Windows)](https://tortoisegit.org/)
---
## 什麼是版控
---
### 這樣也是一種版控

---
### 如果很多人一起工作的話,那不就...
---

---
#### 為什麼要做版本控制,要控制什麼?
---
#### 那版本是什麼?
---
#### 目的就是為了紀錄每次的新增與修改,並由Git幫你留下紀錄
---
## Git由來
---
#### 就是他啦
##### Git 是由 Linux 核心的作者 Linus Torvalds 在 2005 年為了管理 Linux 核心程式碼,僅花了 10 天所開發出來的

---
#### 大家都說Git是分散式,到底是什麼啊??跟集中式有什麼區別呢?
---
* 集中式的版控系統(Centralize Version Control),都需要有一台專用的伺服器,所有的更新都需要跟這台伺服器溝通。也就是說,萬一這台伺服器壞了,或是沒有網路連線的環境,版本控制功能就沒辦法使用。
---
* Git 是一款分散式的版控系統(Distributed Version Control),雖然通常也會有共同的伺服器,但即使在沒有伺服器或是沒有網路的環境,依舊可以使用 Git 來進行版控,待伺服器恢復正常運作或是在有網路的環境後再進行同步,不會受影響。而且,事實上在使用 Git 的過程中,大多的 Git 操作也都是在自己電腦本機就可以完成。
---
## Git工作區介紹
---
#### Git 分成以下三個工作區
1. Working: 工作目錄
2. Staging: 暫存區
3. Repository: 儲存庫
---

---
## 基本操作 & 情境模擬
---
### Git 初始化
##### 狀況:我想用git做版控啦!
---
## git init
---
### 加到暫存區
#### 狀況:將新增或是修改的檔案加入版控吧
---
1. git add file_name
2. git add . (工作目錄底下的所有內容)
---
### 查看狀態
##### 狀況:有改到什麼東西嗎?
---
## git status
---
### 提交
##### 狀況:嗯嗯,差不多了 就告一個段落吧
---
## git commit -m "message"
---
### 查看提交紀錄
##### 狀況:我最近提交了什麼呀?
---
## git log
---
### 修改訊息
##### 狀況:啊~完蛋我提交訊息打錯了啦
---
#### git commit -\-amend -m "new_message"
---
### 建立分支
##### 狀況:我不想在原本的分支開發新功能,該怎麼辦呢?
---
1. git branch (查看目前所有分支)
2. git branch branch_name (建立新分支)
3. git checkout branch_name (切換分支)
---
## 為什麼要建立分支呀?
---
### 合併分支
##### 狀況:我開發好了,想合併回原本的分支
---
1. git checkout 原本分支
2. git merge 開發分支 (開發分支合併到原本分支, 可將merge想成merge from)
---
### 還原
##### 狀況:可惡,做錯了
---
#### git checkout file_name / git checkout .
#### git reset HEAD~ -\-mode / git reset HEAD^ -\-mode
mode:是指reset的模式,總共有soft、hard、mixed三種行為
---
### Git在reset時有三種模式
#### 在commit後reset的行為
1. soft : 回到暫存區
2. hard : 新增與修改檔案直接跟你說掰噗
3. mixed : 回到工作目錄
<br>
<br>
###### 可以自己新增或是修改檔案,透過git status來觀察reset後的狀態唷
---
### 上傳
##### 狀況:搞定,準備上傳吧
---
## git push
---
### 獲取
##### 狀況:大家都改了什麼呢?
---
## git pull
---
### Git常用的基本流程
pull -> branch(新增&切換分支) -> add -> commit -> merge(合併回原本分支) -> push
---
## Git GUI
---
## GitHub
---
## Q&A
{"metaMigratedAt":"2023-06-15T04:29:34.100Z","metaMigratedFrom":"Content","title":"Git","breaks":true,"description":"疑問","contributors":"[{\"id\":\"5be6adb0-3e56-4cd8-8073-d512e611dfc7\",\"add\":3244,\"del\":730}]"}