---
# System prepended metadata

title: Git
tags: [docs]

---

檔案ID # Git
## 基本設定與初始化
指令接打在terminal
### 設定姓名
```git=
git config --global user.name "輸入姓名"
```
### 設定Email
```git=
git config --global user.email "輸入email"
```
### 初始化
用途 : 建立.git資料夾，放入預先建立好的東西。
```git=
git init
```
### 清空終端機內容
```git=
windows版:cls
mac版:clear
```

## Git指令
![72316309_2739111376108490_535994150261096448_n1fkzgd](https://hackmd.io/_uploads/BJOq6m4vR.png)

---

### git status
```git=
檢查檔案現在的狀態
```

![image](https://hackmd.io/_uploads/SyIQQEVDC.png)
#### 檔案狀態
```git=
Untracked(未追蹤)
Tracked(已追蹤)
Staged(已暫存)
Committed(已提交)
```

---


### git log
```git=
檢視先前歷史紀錄，內容包括提交者姓名、email、日期和說明文字
退出檢視模式:按Q鍵
```
![image](https://hackmd.io/_uploads/HJH_V4NDR.png)

#### git log --online
```git=
用途:簡短版的git log，適合快速瀏覽
```
![image](https://hackmd.io/_uploads/ByKcEVNw0.png)

---


### git add <檔名>
```git=
將檔案放入暫存區，準備接受提交
```
![image](https://hackmd.io/_uploads/ByC8QEEDA.png)
#### git add .
```git=
將所有檔案放入暫存區，準備接受提交
```

---

### git commit -m"輸入訊息"
```git=
將檔案提交，每一個檔案都需要附帶一個簡短的說明，方便了解提交目的和內容變化
```
![image](https://hackmd.io/_uploads/Skni7NEv0.png)

---

### git diff 檔案ID -- 檔名
```git=
檢視檔案歷史更改紀錄
紅色為過去檔案，綠色為更改後檔案
fd0b510(檔案ID) 建立還原點(說明文字)
```
![image](https://hackmd.io/_uploads/Hkoet44PR.png)

---

### git push -u
```git=
push 到 origin HEAD
```
#### git push -f
```git= 
強制push(在新branch)
```
---
### git checkout 檔案ID -- 檔名
```git=
將檔案回溯到先前的檔案
回溯完後記得再建立新的說明
```
![image](https://hackmd.io/_uploads/rJYtqVND0.png)

#### git checkout -b \<branch name\>
```git=
建立並切換到新branch
```
---
### git reset --hard 檔案ID
```git=
將檔案回到檔案ID的存檔點，並捨棄後面的存檔紀錄
此操作為不可逆
```
![image](https://hackmd.io/_uploads/rkjVnNVP0.png)

輸入前:
![image](https://hackmd.io/_uploads/SyW4pV4P0.png)

輸入後:
![image](https://hackmd.io/_uploads/SJod6ENPR.png)
![image](https://hackmd.io/_uploads/BkDoT4NDA.png)
---
### git clone <網址>
```git=
把整個專案複製一份下來並存在同名的目錄裡
```
---
### git pull
```git=
把upstream的新進度download
```

## 檔案忽略
```git=
先建立.gitignore檔案，再於檔案中寫入要忽略的檔名
好處:避免無關檔案混入紀錄，維持專案整潔
```

![image](https://hackmd.io/_uploads/rkjXWSNwC.png)


## Branch
```
解決問題
1. conflict
2. 影響repo
```
---

### git checkout \<branch name\>
或是 `git switch`
```git=
切換branch
```
---

### git checkout -b <branch_name>
創建新的 branch 並移動到該分支

---
### git rebase <rebase到*哪個 branch*>
```git=
把目前branch起始點移到最新進度
```
#### git rebase --continue
```git=
解決完conflict繼續rebase
```
---
### git branch 
```git=
查看branch(按q離開)
```
### git branch -a
```git=
查看所有branch(包含remote)
```
#### git branch -d \<branch name\>
```git=
刪除**電腦**上的branch
```

## Merge 方法
```git=
pull request (cpmpare & pull request)
merge完再push
```
### git merge <要merge的branch>
```git=
merge branch
```
>[!Caution]merge完branch會消失！！

### git merge --no-ff <branch_name>
合併後仍有 branch 分支的效果

![截圖 2024-08-11 下午4.42.15](https://hackmd.io/_uploads/BkAKFxLcR.png =60%x)

## 參考資料
https://www.youtube.com/watch?v=FKXRiAiQFiY

---

- Contributor: 陳宏瑜, 陳婕熙, Ateto