Chapter 3 Github Desktop-Individual
基本名詞介紹
- Untracked:指尚未加入版本控制的檔案或資料夾
staged:有加入版本控制的檔案或資料夾
- local:本地端,指自己的電腦
remote:遠端(雲端),指GitHub
fetch:取,接近get的意思,是聯繫本地端與雲端的橋樑。
本地端到雲端
git init
小瑜把需要的軟體資源都裝好了,現在開始他計畫每次寫報告都要把檔案透過Git做版本控制,他要怎麼做呢?
把尚未有版本控制的檔案或資料夾加進來
- 小瑜新增了一個GitDemo2的資料夾
新增版本控制資料夾

選擇Add repository 則是把原本就已經有版本控制的檔案或資料夾,整合到Github Desktop的GUI介面,較方便操作。
- 小瑜在裡面新增了一個檔案
Demo.txt
在版本控制資料夾內新增檔案

git commit
小瑜在
Demo.txt
內新增了一些內容,差不多寫好一個段落了…
檔案新增內容

Github Desktop偵測到檔案變化

新增檔案後,每當撰寫文字(或程式開發)到一個段落時候,就需要進行
commit
。每一次commit
,Git都會計算一個專屬的、絕對不重複的版本號。有點類似郵戳認證的感覺。切勿每天工作做完才
commit
,建議是完成一個小部分(也許畫完一個圖、修正完一個bug、建立好一個模型、寫好一個新的軟體功能)就commit
一次。極端一點,有些人會每半小時到一小時
commit
一次。
雲端到本地端
git pull
有時候求個方便,小瑜想知道是否可以在GitHub編輯檔案,然後同步到自己電腦?
Github上面也已經有了一模一樣的檔案

針對Demo.txt檔案進行更改(右邊的小鉛筆)

更改完成

看到pull,一個往下的箭頭了吧~~

成功同步到本地端

將自己在雲端GitHub新增的東西,同步到本地端
GitHub Desktop稍微省略了
push
和pull
的差異,原則上只要用push: 推上雲端
,pull: 從雲端把東西拉下來
去理解即可。
git clone (fork, then clone)
小瑜在GitHub發現別人整理的資料相當不錯,想要複製一份給自己再慢慢地參考,他要怎麼做呢?…..
假設小瑜需要的就是hadley/r4ds這個repo

點選Fork,就能複製屬於自己的一份(Fork數量變化是?

進一步地複製網址,準備拉到本地端

點選Clone Repository

貼上每個repo專屬的網址

這樣本地端是否也就有一份了呢?

先
Fork
,把有興趣的專案(repo),複製出屬於自己的一份把整個專案從雲端拉下來到本地端的動作就叫做
clone
clone
是針對整個repo;pull
則是針對commit
- 切記要先
Fork
,畢竟若直接clone別人的repo的網址,後續修改檔案是無法同步回去雲端的,畢竟自己怎麼可能會有別人帳號本身的同步儲存權呢?
其他
revert
寫著寫著小瑜覺得某一段落的文章內容實在是不需要了,除了進到檔案選取 + delete,版本控制怎麼樣能夠幫到他的忙?
在History區,對你要revert的commit點選右鍵

若revert剛才從Github pull下來的commit

綠色表示新增,紅色表示刪去

這時候新增的那行就不見了!酷吧!

每一次的commit都像是個郵戳章,紀錄著檔案隨著開發者編輯的變化。自然地若你不要某一個部分,只要把紀錄該部分所對應的commit給
revert
掉,自然也就是把郵戳章給抹去了。所以若是commit習慣越好,就能越方便
revert
掉小範圍的程式,方便管理,會比若要revert
就要去掉幾百行程式來得好很多!把commit推翻掉的方式不只有
revert
,若有需要可以再稍微查找一下,選一個順手的方式。
- 這時候
revert
完的檔案狀態是只有本地端呢?還是連雲端的GitHub都有revert了呢?