版本控制是什麼

以前在做報告時,如果想把每一階段的版本都存下來,就會幫每個階段的檔案取很多不同的名字,這就是一種版本控制

1
2
3
4
5
畢業專題.doc
畢業專題_2.0.doc
畢業專題_3.0.doc
畢業專題final.doc
畢業專題final的final.doc

一旦版本越來越多,就會越來越混亂,這時候我們能夠使用工具來幫我們做版本控制,也就是我們使用Git的原因。

團隊的版本控制

版本控制就像遊戲的存檔,如果今天是存檔到第三關,大家都能從第三關開始玩,分別進行不同的路線,最後在把各自的紀錄合在一起。

假設今天從穩定版進行開發,分別開發兩個不同的功能,上線的穩定版的產品臨時有 bug 需要修復,又從穩定版進行bug fixGit可以讓這三個路線各自完成之後,再融合進化成一個新的穩定版。

Git實際上幫我們做了什麼

假設今天有一個版本叫做v1

我們對v1做了一些更動,git 就幫我們新增一份檔案存起來,叫做v2

那如果有檔案不想要做版本控制,就把該檔案移出版本控制的資料夾。
例如不想將test檔案加入版控,就將它移出資料夾。

當我們在多人協作的時候會有同時以同個版本進行開發的情況,假設今天兩個人都對v2版進行開發,要怎麼保證兩人的版本都不會衝突?

因此版號就不能用v1v2這樣的流水號,就變成這樣:

v1v2都變成了一段亂碼


但是這樣就會遇到一些問題,都是亂碼的話要怎麼知道這些版本的先後順序?

所以就開一個檔案來存版號的順序

 接下來還會有一個問題,隨時都想知道最新的版本是哪個該怎麼辦,所以就再開一個檔案裡面永遠都會放最新的版本

這些就是Git再幫我們做的事情。

總結

  1. 需要新版本:開一個資料夾
  2. 不想加入版本控制:不要加入資料夾
  3. 避免版本號衝突:用看似亂碼的東西當作資料夾名稱
  4. 知道最新版本:用一個檔案來存

安裝Git

Git 常用指令筆記

git init:初始化數據庫

當下了這個指令之後,Git就會知道我們要對這個檔案夾做版本控制,並初始化這個資料夾的數據庫,接下來就可以針對這個檔案夾做更多Git的指令。

在桌面開一個測試用的檔案夾folder並執行git init,會發現folder資料夾底下多一個.git的隱藏資料夾

mac 的預設設定是看不到隱藏檔案的。三招讓 Mac 顯示出隱藏檔案

git status:查詢當前狀態

就會跟你說目前版本的狀態,有沒有什麼更動

git add .:將檔案加入到索引

folder資料夾底下新增一個newfile檔案,使用git status查看狀態,會看到有新的變更。

 使用git add .將檔案加入到索引,再用git status,查看狀態,會看到紅字變成綠字了,代表更動內容已經加入版本控制

如果反悔了想要取消某個檔案的的版本控制

1
git rm --cached <file>

git commit -m "修改內容":將索引檔案變成一個更新commit

當我們將檔案加入到版本控制之後,就可以提交這次的進度變成一個commit

1
git commit -m <commit message> # 提交訊息

這邊的commit message我就寫add newFile

git commit -am : add & commit

 提交 commit 之前需要先 add,也可以合在一起寫

1
git commit -am "commit message"

需要注意的是,-am只適用已修改或刪除的檔案,如果是新增加的檔案的話,還是需要先執行add .再提交commit

官方文件說明:

1
2
3
4
-a
--all
Tell the command to automatically stage files that have been modified and deleted,
but new files you have not told Git about are not affected.

可以參考文件 Git 官方文件

git log : 觀察commit歷史紀錄

當我們有多筆 commit 可以透過git commit來看紀錄

可以看到的資訊:

  1. commit : 版本號
  2. Author : 提交的作者是誰
  3. Date : 什麼時候提交的commit
  4. 提交的內容

也有額外的參數可以使用,能夠看到不同的格式。

  • git log --oneline : 可以看到版本號簡寫成了完整版本號的前 7 碼,以及更改的內容。

git branch : 使用分支

  • 查看分支
1
git  branch
  • 新增分支
1
git branch <分支名稱>
  • 修改分支名稱
1
git branch <分支名稱>> <新的分支名稱>
  • 刪除分支
1
git branch -d <分支名稱>

如果要刪除的分支還沒有完成合併,git 會有提示,例如:

1
2
3
$ git branch -d 分支名
error: The branch 'feature' is not fully merged.
If you are sure you want to delete it, run 'git branch -D 分支名'.

再執行git branch -D 分支名就可以成功刪除。

git checkout : 版本切換

  • 切換分支
1
git checkout <分支名>
  • 如果想新創建一個名為feature的分支並且切換過去。
1
git checkout -b feature
  • 當完成該功能想要回到最新的mster版本。
1
git checkout master

.gitignore : 讓 git 忽略不想要被版本控制的檔案

每次要提交commit前都要決定哪些檔案要add到版本控制的暫存區,但是如果執行git add .又會將不想被版本控制的檔案一併加入到版本控制中,這時候就可以新增一個.gitignore 檔來忽略不想被版本控制的檔案。

  • 新增.gitignore 檔
1
touch .gitignore

  • 使用vim進入.gitignore
1
vim .gitignore
  • i進入編輯模式,並寫上想忽略的檔案名稱

  • :wq儲存並離開。

  • 使用cat .gitignore查看內容有沒有新增。

接著在vim文字編輯器中按下i進入編輯模式,寫入想要被忽略的檔案名稱,按ESC退出編輯模式,輸入:wq儲存並離開。


總結

  1. git init : 初始化數據庫
  2. git status : 查看當前狀態
  3. git add . : 將所有檔案加進索引(不包含被忽略的檔案)
  4. git commit -m "commit message" : 提交commit
  5. git checkout <版本>

為你自己學 Git

受益良多的大補帖,推推!!

 以上就是這篇的筆記內容

程式導師實驗計畫第三期