# Git #2 Git 基本操作
###### tags: `Git`
## 基本指令架構

## Git 常用指令
| 指令 | 說明 |
| -------- | -------- |
| git init | 初始化數據庫 |
| git status | 查詢這個專案的當前狀態 |
| git add . | 將檔案加入到索引 |
| git commit -m "你想寫下的更新說明" | 將索引檔案變成一個更新(commit) |
| git log | 觀看 commit 歷史紀錄 |
| git clone 數據庫網址 | 下載遠端數據庫 |
| git push origin master(檔案所在分支,不一定是 master) |更新遠端數據庫 |
| git checkout commit代碼/分支 | 返回查看該 commit 狀態 |
| git pull | 將遠端數據庫下載同步更新到本地數據庫 |
| git clone <url> | 下載遠端數據庫 |
| git remote -v | 觀看遠端數據庫列表(包含 url) |
## git status - 檢查數據庫狀態
在初始化 Git 數據庫之後,就可以使用 Git 來做版本控制,在製作專案的時候難免會去新增、修改、刪除檔案,使用這項指令可以知道你做了什麼事情
### git status 範例
我新建了一個 robot 專案,裡面並沒有任何檔案,並在使用 `git init` 初始化過後來做版本控制
新增檔案之前,使用一次 git status 來看看

可以看到專案是空的, `nothing to comit`
那我們建立一個新的檔案來看看

可以發現 Git 檢查到了這個專案新增了一個 robot.html,一個 untracked 檔案,**注意這時候這個檔案還是在你的工作目錄,並還沒有到數據庫這個地方喔**
---
## 1. git add . - 放到索引
在我們對這個目錄進行一些動作後,想要將檔案進行更新等等並推到數據庫
在此之前透過索引可以讓 Git 知道你哪些東西是要推到數據庫的,而索引可以將這些檔案湊成一次更新檔放到本地數據庫中
### git add . 範例
在先前新增了一個 robot.html 之後我想要將東西更新到數據庫,在此之前先將檔案新增至索引

---
## 2. git commit -m 'update' - 推到本地數據庫
將檔案放到索引之後,我想要將檔案放到本地數據庫作為一次的更新
### git commit -m 'update' 範例

"" 裡面是更新檔的說明,可以將你想寫下的寫下去,並成功新增檔案到本地數據庫

在 commit 之後可以發現 untracked 這條會消失,代表放進入了本地數據庫
### git log - 觀看 commit 歷史紀錄
透過 `git log ` 可以知道你 commit 的紀錄

可以知道作者是誰、以及日期還有 commit 說明
---
## 3. 放到遠端數據庫 GitHub repository
### step1 在 GitHub 新增一個 repository 專案
[GitHub](https://github.com/)
### step2 連線數據庫

新增完專案後,可以看到妳的專案有兩種方式可以連線到遠端數據庫來推檔案
1. 創建一個新的本地數據庫
2. 使用本地已經創建過的數據庫
如果你有創建了就使用第二個,直接複製貼到 Git Bash 就可以惹!
指令講解:
`git remote add origin git@github.com:Danny-1211/robot.git` : 新增(註冊)遠端數據庫,origin 為數據庫預設名稱
`git branch -M main` : 創建一個分支就做 main,他會連線到遠端數據庫
`git push -u origin main` : 將本地數據庫檔案推到 origin 這個遠端數據庫
* `-u` : 代表他預設會推到哪個數據庫
* `origin` : 遠端數據庫預設名稱,可以定義名稱
### step3 成功!

### 記住! 遠端數據庫並不會跟著本地數據庫一起更新
每當本地數據庫更新完時,也要記得更新遠端數據庫
更新遠端數據庫指令:
`git push origin master ( origin main )`
把本地數據庫 push 到遠端數據庫的分支不一定完全是 origin master , 之後會再補充 origin 跟 master 是什麼
## 每當有修改、更新檔案時,都需要從 git add . 開始從放上索引再一步步到放上遠端數據庫

## Git 還原先前版本
有時候隨著版本更新難免都會出現程式碼有錯誤的情況,我們可以透過 Git 再次返回到錯誤之前的狀態
### HEAD
Head 指標指向目前狀態,會隨著我們 commit 目前進度移動,所以我們可以移動 HEAD 回到某個 commit 之前的狀態
我們使用 `git log ` 來查看 commit 紀錄

我們可以看到最新的 commit 有一個 HEAD所指向的地方,這裡就是目前這個 commit 後的檔案狀態
### 假設我們想回到上一個 commit 要怎麼辦 (回到本次的更新說明5/22)
#### git checkout commit代碼/分支
checkout : 是查看的意思
我們可以看到 commit 後面有一堆英文+數字,這個就是 commit 代碼
我們就是要利用這個代碼搭配 `git checkout` 回到這個代碼所屬 commit 狀態

上圖就是利用 git checkout 返回到上個版本
### 那我們要回去最新的版本怎麼辦
#### `git checkout main (該分支名稱)`
預設就會回到該分支囉或是要再利用代碼也是可以的