---
# System prepended metadata

title: Git 學習歷程 ＃1
tags: [Git, MacOS, github]

---

# Git 學習歷程 ＃1
###### tags: `Git` `github` `MacOS`
## 環境
![](https://i.imgur.com/qDDbf7D.png)

## 參考資料
+ https://www.youtube.com/watch?v=Zd5jSDRjWfA (主要)
+ https://www.youtube.com/watch?v=CeC_qyQHiCE (SSH)
+ https://iter01.com/509990.html
+ https://yychen.gitbooks.io/basics/content/ (十分詳細的網站)
+ https://yychen.gitbooks.io/basics/content/chapter4/ (vim 指令)

## 安裝 Git
這部分可以跟著 https://youtu.be/mmkDyV59nRo 大神一起做
#### 1. 打開 Terminal
#### 2. 安裝 Homebrew
#### 2. 透過 Homebrew 安裝 Git

## 本地端 Git
步驟：
1. 建立一個資料夾，視為一個 repository，
在資料夾的 terminal 輸入 ==git init==，
即可讓 git 知道此資料夾。
1. 預設分支名稱多為 main、master，
若不確定即可用指令 ==git status==。
1. 資料夾若需要將全部檔案加入給 git 追蹤，
則輸入 ==git add .== 即可，
<font color="#f00">注意</font>：此時只是將檔案存入一種 buffer 而已，git 還未正式追蹤。
1. ==git status==，
可同時查看有哪些 files 已經被 git 加入暫存區了(還未正式被追蹤)。
1.  將暫存區所有修改提交給 git 追蹤(添加紀錄)，
執行 ==git commit -m "說明"==，一定要加 -m。
＊為啥必須加 -m，https://ithelp.ithome.com.tw/articles/10266697
1. 這樣就完成在本地端做版本控制的紀錄了。
＊至於為啥有個暫存區的概念，
i.e.為啥需要 git add 與 git commit 分開，
參考 https://www.zhihu.com/question/19946553

## 連結遠端 Git
此以 github 為例，
因為 github 不再支援密碼存取遠端，
所以好像只能用 ssh 連線的方式同步 repository 了。
ssh 可以參考上方[影片2](https://www.youtube.com/watch?v=CeC_qyQHiCE)的設定。
步驟：
1. 在 github 上建立 repository，Readme 可以不用先加入。
2. 會出現一個頁面如下，執行第二段就完成了，![](https://i.imgur.com/rLGLfcI.jpg)
3. ==git remote==，可以得知已經有建立哪些遠端連線了。


## 遇到兩端不同步的狀況
本來想在 Github 上，撰寫 Readme 當作筆記，
最後發現有點麻煩，還是在 Hackmd 紀錄好了。ㄎㄎ
所以剛開始有在 Github (遠端 Git) 上做 commit 了，
在回來本地端執行 commit 時，就會跑出以下錯誤回報，
![](https://i.imgur.com/k2ZMUVb.png)
:::info
解決辦法如下
:::
可以從本地端 git push 上去遠端，
當然也可以從遠端下載 pull 回來本地端ㄚ。
大概如以下網站所述相同，(點選一下圖片XD)
[![](https://i.imgur.com/ngR051m.png)](https://backlog.com/git-tutorial/tw/stepup/stepup3_2.html)
因此我們就先將遠端的分支下載下來，
使用指令 git fetch origin 即可從 origin 這個節點，
下載遠端上的分支到本地端(兩端仍未同步)。
就是遠端回來是 origin/main 這個分支，
本地端仍是 main 這個分支，
我們可以看 origin/main 長怎樣，
用 git diff main origin/main 來看差異
![](https://i.imgur.com/bm67IKu.png)
之後我們就 merge 起來唄，
兩邊就可以同步了，
直接輸入 git merge origin/main 即可，
不用在特別說明另一個，
因為已經是本地端了。
![](https://i.imgur.com/KvXkUMU.png)
merge 完成後，
再記得 push 回遠端就打工告成了。
![](https://i.imgur.com/DyKW5mK.png)
查看 git log 就可以發現許多紀錄了XD
![](https://i.imgur.com/nJyKVui.png)
話說用 git pull 就可以將 fetch + merge 完成了。
下次在研究唄。



