---
# System prepended metadata

title: Git Hub Note
tags: [CS]

---

---
title: Git Hub Note
---

[TOC]
## 前情提要
**此筆記整理中**

:::info
1. 所有長`這樣`的都是指實際上打在Terminal上的指令，可以複製貼上的意思
2. 所有長`<這樣>`的是會根據不同人或檔案或分支要填入不一樣的內容，而且是**必填**
3. 所有長`[這樣]`的也是填入不一樣的內容，不過是**選填**
:::

## Git Command

### Initial

- `git init`：開始對現在的檔案位置(所在的資料夾)使用Git，會自動產生master的分支(branch)，並在檔案原地新增`.git`跟`.idea`兩個檔案(原則上不用理它們)
- `git clone <repo url>`：從Git Hub網站上複製已經存在的檔案到現有的資料夾
    - 在<repo url>後面加上` --depth<n>`n是任何數字，意思是指下載當前這個branch的最新n次commit
    - 延續上一點，在後面加上` --no-single-branch`可以下載所有branch的最新一次commit
    - 對於clone大型專案而言是節省速度很重要的步驟喔
- `git config --global user.username <你的 github 使用者名稱>`：連接本機跟遠端
- `git remote add origin <remote HTTP>`：把現在的檔案跟Git Hub上面的Repository連結，**需要在Git hub先建立remote repository，而且要是空的repository**
- `git add <file name>`：當你在資料夾裡面新增檔案，而且要把那個檔案放進Git Hub列管的時候使用，有時候第一次跟遠端連接時也要

:::success
這些是每次要開一個新的檔案並放到Git Hub上面的時候可能會用到的指令。
`git clone`是把遠端的檔案拉到本機(通常是別人的)
`git remote add`是把本機的檔案放到git hub上，所以這兩個基本上不會共存
:::

### Branch

- `git branch <branch>`：建立新的分支(但留在原地)
- - `git branch -M <branch name`：改變現在branch的名字，但注意！如果已經連接到遠端，Git Hub上的branch不會跟著改名，目前我的認知是這兩個branch就從此拆家了
- `git checkout -b <branch>`：建立新的分支並切換過去
- `git checkout <branch or file>`：跳到那個分支(或檔案)
- `git branch -d <branch>`：刪除分支
- `git merge <branch>`把`<branch>`：merge進現在的branch，但謹慎使用...：)

:::success
Branch是個好東西，尤其是很多人合作開發的時候，要嘗試做新的功能時不要在主要的分支(通常叫做master)中嘗試，輕則自己砍掉重練，重則害別人砍掉重練。
merge則是當你在新開的分支(develop)完成了新的功能之後，要跟主要的分支合併時使用的指令，通常會跳出兩個branch裡面有差異的地方問你要用哪一個，但沒用好或是強行merge的話就會發生問題。
:::

### Commit、Push、Pull

- `git commit -m <"commit message">`：要儲存更改後的檔案的指令，可以理解為在本機儲存新的版本，要注意commit message要用雙引號或單引號包起來。
- `git reset -hard Head~1`：不小心commit錯誤想要undo的時候用的...`Head`指的是你現在的位置，`~1`是undo最近一次的commit。**如果那次commit已經push到遠端的話，只會undo本機的部分，並且會導致遠端根本機的版本不統一**
- `git push`：把你在本機commit的內容更新到遠端，但是一定要確定你在本機的檔案已經跟遠端同步了(例如你的同學A有push新的內容，就會有版本衝突)
- `git push --tag`：把你在本機的tag上傳到遠端
- `git fetch`：幫你把目前遠端新的內容更新到本機端
- `git pull`：如果你git fetch之後發現有版本差異，就用這個指令把遠端的內容拉下來(建議每次打開電腦要做事前都做一次這個動作)。但如果git fetch沒有顯示差異，就不要git pull了，誰知道你會不會因此搞砸團隊的版本控制：)
- `git push -u <remote name> <branch name>`：當你在本機新增了branch，在Git Hub上不會自動跑出來，所以push的時候也不會push那個branch的內容。需要用這個指令在遠端新增對應的branch
:::success
這些是平常使用git hub最常用的指令(可能是每天？)所以要熟練到不用看筆記
然後`git fetch`跟`git pull`真的真的真的很重要
:::

### tag
- `git tag <tag name>`：在現在的commit上加入標籤

### 其他
- `git log`：列出現在這個branch上所有commit的紀錄，可以在後面加上`-p`查看每個版本之間的改變的部分；`-n`n是任何數字，這樣可以只顯示最近n筆commit
- `git status`：讓你看看目前所在的位置的檔案狀態(在哪個branch、有沒有需要commit的內容......等)
- `git --help`：讓官方文件來幫助你XD

#### .idea檔案
`.gitignore`：要忽略的檔案清單，這是用來告訴 Git，當在做版本控制記錄的時候，忽略這些檔案。通常一些機密資料，如資料庫帳號密碼或是 server IP 位置等，記得要加入。也可以參考 github 上面的一些範本 在新增 repository 時選取對應的程式語言

#### tab鍵
當你忘記某些檔案的全名(或是懶得打)的時候，可以打出開頭然後按tab鍵，會依序自動打出符合的檔案名稱，或是練續按兩下會列出所有開頭相符的選項

## 參考資料

[常用基本git指令-Git Command Line](https://medium.com/@brianwu291/basic-git-command-line-collections-2242c03c870e)


    
---
移植
    
---
title: Git Control Note 
---

[TOC]

### Git


#### Git Command

#### Git Flow

`git flow init`
`git flow feature <feature>`
`git flow feature finish <feature>`


### Git Hub

#### git branch
`git commit -m <message:string>`
`git merge <branch>`把`<branch>`merge進現在的branch
`git branch -d <branch>`刪除舊的分支
`git checkout <branch or file>`
`git branch <branch>`建立新的分支(但留在原地)
`git checkout -b <branch>`建立新的分支並切換過去

#### 連結remote repository
`git config --global user.username <你的 github 使用者名稱>`
連結本機跟遠端的資料庫
`git fetch`
更新本機端的commit

**需要在Git hub先建立remote repository**

`git remote add origin <remote 網址>`

#### .git檔案
`.gitignore`：要忽略的檔案清單，這是用來告訴 Git，當在做版本控制記錄的時候，忽略這些檔案。通常一些機密資料，如資料庫帳號密碼或是 server IP 位置等，記得要加入。也可以參考 github 上面的一些範本 在新增 repository 時選取對應的程式語言

### Git Lab