前言
此篇筆記為參加程式導師實驗計畫中,整理在 Lidemy [Git101] Git 超新手入門 的課程筆記。
簡介
What 什麼是 Git 和版本控制?
Git 就是一種版本控制的系統。版本控制簡單來說就是進階版的檔案管理。我們平常管理資料夾與檔案的操作,包含最常見的複製、命名等。例如:HW1, HW2...; Work1-1, Work1-2...
Why 為什麼要版本控制?
版本控制不只是基本的新增、複製與刪除檔案,還能詳細紀錄檔案內容是誰以及什麼時候寫的,保留所有歷史紀錄。在不小心刪掉檔案後,還能找回來!不管是個人或團隊開發上使用 Git 進行版本控制,都相當方便!
How 如何使用 Git 版本控制?
可以使用 CLI (命令列介面) 或 GUI (圖形化介面),進行操作。著名的 GUI 例如:SourceTree, GitKraken 等。本篇筆記以 CLI 進行 Git 指令的介紹。
Git 工作區域
- 工作目錄 (Working Directory): 就是你電腦裡的工作區,現在正在編輯檔案的地方。
- 暫存區 (Staging Area): 在你要把檔案交給 Git 留下記錄前,先把檔案暫時存放的地方。
- 儲存庫 (Repository): 就是正式把檔案存放在 Git 的地方。放在這裡,才會在 Git 裡留有記錄喔!
情境
你有一個叫做菜哥的朋友,他有一個煩惱。因為他的笑話太多了,所以他目前都用文字檔記錄在電腦裡,可是變得越來越多之後很難紀錄,而且他的笑話是會演進的。會有版本一、版本二甚至到版本十,這樣他就要建立好多個不同的檔案,弄得他頭很痛。他希望你能教他用 Git 來做版本控制。
好心的你就要來教他 Git 的基本概念以及基礎的使用囉!
基本操作
1. 安裝
到官網下載 Git。
下載後,打開終端機,輸入 git --version
,若有出現下載版本資訊,就代表你安裝成功了。
$ git --version
git version 2.24.3 (Apple Git-128)
2. 移動位置
在開始使用 Git 前,先移動目前的位置到要進行版本控制的目標資料夾
$ pwd # 目前所在位置
/Users/tsai
$ ls # 列出目前所在位置底下的所有資料夾與檔案
Applications Documents Library Music Pictures Public hello-world
Desktop Downloads Movies
$ cd Documents/jokesAll # 移動到 jokesAll 這個資料夾
3. 初始化
使用 git init
才能讓 Git 對這個資料夾進行版本控制。
$ git init
Initialized empty Git repository in /Users/tsai/Documents/jokesAll/.git/
這時你會發現在你的 jokesAll 這個資料夾內,多了一個 .git
的隱藏檔。有了這個隱藏檔,就表示你的 Git 初始化成功啦!
4. 知道目前 Git 的狀態
使用 git status
這個好用的指令,他可以呈現目前所有檔案的 Git 狀態。告訴你許多有用的資訊喔!
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
joke1
nothing added to commit but untracked files present (use "git add" to track)
5. 把檔案放到暫存區
使用 git add
可以把檔案從本地端移到 Git 的暫存區
$ git add joke1 #或是
$ git add .
git add 檔案名稱
: 一次移動一個檔案git add .
: 一次移動全部檔案
6. 把檔案正式提交到 Git 的儲存庫
使用 git commit
把檔案從暫存區移動到儲存庫,並留下這次提交的一些訊息內容,例如:"This is my first joke!"
唯有把檔案放到儲存庫中,才能在 Git 中留下紀錄!
$ git commit -m "訊息內容"
在這之後,若想到什麼新的點子想放進 joke1,或是想到另一個全新的笑話,寫在 joke2,都可以用 git add
, git commit
,把檔案提交給 Git。
7. 檢視 commit 的紀錄
使用 git log
指令就能查看你 commit 的所有歷史紀錄。包含:版本號碼、是誰以及什麼時間提交等資訊。
$ git log
commit fb6232b78f5db742e2da3a7e2e4a00d96fa65e43 (HEAD -> master)
Author: XX <xxxxxx@gmail.com>
Date: Sun Jun 21 00:57:23 2020 +0800
create joke2
commit 8794f2c6b534156f0672ffc319a3546ef764aa18
Author: XX <xxxxxx@gmail.com>
Date: Sun Jun 21 00:24:15 2020 +0800
first commit
(END)
git log --oneline --graph
: 獲得較簡短的歷史紀錄資訊
8. 回到某個版本
有了 commit 留下的紀錄,我們就能用 git checkout
加上其獨特的識別碼,讓我們的工作區回復到某個特定的版本。
$ git checkout {版本號}
假設今天你覺得第二次 commit 的內容不喜歡,想回到第一個版本時,就可以利用 git checkout
加上第一次的版本號,就能回到過去了。
9. 開分支開發新功能
$ git branch {分支名稱}
如果今天你想找你的朋友 h0w 哥一起幫你想更好笑的笑話。那就可以另開分支,意思就是複製一份現在的工作區域內容。這樣你們可以分頭進行而不會相互影響了。
10. 合併分支
$ git merge {new-feature}
今天 h0w 哥想出了不錯的點子,記錄在他分支上。你想把他的檔案合併進來,就可以使用 git merge
加上他的分支名稱,就能讓你的工作區包含他寫的新內容了。
而目前這些版本控制都是放在電腦內,若你想要讓更多人看見你的笑話。就可以使用 GitHub。
GitHub 簡言之就是雲端的 Git repository。
11. 推上 GitHub
$ git remote add origin {網址} # 建立遠端的連線
$ git push -u origin master
利用 git push
指令,就可以把電腦裡的檔案上傳到 GitHub
12. 獲得最新異動
$ git pull origin master
假設今天跟你一起合作工作的 h0w 哥,修改了一份檔案並上傳到 GitHub,若你想要獲得這份新的更動資料,就可以使用 git pull
指令,把遠端 master 分支的檔案拉下來到你的電腦裡。
以上就是基本的 Git 操作,多練習就能得心應手,做好檔案的版本控制囉!
GitHub 補充
Git 跟 GitHub 的差別
- Git : 工具
- GitHub : 網站。使用 Ruby on Rails 開發,是一個 Git Server
GitHub Flow
在 GitHub 上管理分支的方法
Create a branch -> Add commits -> Open a Pull Request -> Discuss and review your code -> Deploy -> Merge
詳細資訊請參考:Understanding the GitHub flow
狀況劇
我 commit 了但是想改 commit message
- 修改最後一次 commit message:
$ git commit --amend -m "{訊息}"
- 修改之前歷史紀錄的 commit message:
1. $ git log --oneline
2. $ git rebase -i {要回去的版本號}
3. 把 pick 改成 reword
4. 修改訊息內容,存檔離開
我 commit 了可是我又不想 commit 了
git reset HEAD^ --hard, --soft
- hard : 上一個修正的檔案與commit都移除了
- soft : 上一個修正的檔案還在,但commit移除了
詳細資料請參考:Git reset 的三種模式( soft mixed hard )比較
我還沒 commit,但我改的東西我不想要了
- 回到特定檔案未修改之前:
git checkout -- <file>
- 全部檔案返回未修改之前:
git checkout .
我想改 branch 的名字
git branch -m <new brach name>
想摘下遠端的 branch 給你
git checkout <遠端branch名稱>