[教學] git-7 開始 git - 討論區

[教學] git-7 開始 git

文章瀏覽次數 1667 文章回覆數 8

特種兵

特種兵圖像(預設)

2020-02-16 13:45:57

From:1.161.133.234

前言

安裝與設定完 git 不代表你的系統已經開始受到 git 的版控

而是我們需要把資料夾與檔案加入 git 的控管當中

事實上我們現在還沒有開始讓 git 控管我們的任何一個檔案或資料夾

之後我們都會在 git bash 上作業,讓我們先進入 git bash 中,應該還沒忘吧。

讓資料夾被 git 版控

我們新增一個資料夾並讓這個資料夾被 git 版控,也就是被 git 追蹤

說明一下之後的體歷:

  • # 井號開頭是註解,不需要輸入,通常是用來說明與解釋指令
  • $ 錢號後面則是我們要輸入的指令
  • 沒有這些符號的就是下完指令按 enter 執行後的輸出結果
# 進入 git bash 後先看看自己在哪裡
$ pwd
 /c/Users/Administrator
# 切換到 D 槽,不一定要這樣,就看大家習慣,反正只是練習
$ cd /d
# 建立一個資料夾做為練習,就叫 practice 吧
$ mkdir practice
# 進入該資料夾
$ cd practice
# 初始化這個資料夾,讓他開始被 git 版控
$ git init
 Initialized empty Git repository in D:/practice/.git/                           

上面最後一個指令的執行結果是告訴我們 practice 開始被 git 版控了

他會在 practice 下新增一個 .git 的資料夾

這個資料夾就是在記錄 git 的版控資訊

其他加入追蹤的資料夾或檔案被刪被改了都救得回來,都是靠 .git 的紀錄資訊

所以這個 .git 很重要,被刪了就等於是解除 git 的版控了

.git 沒了就會讓該資料夾回到一般的狀態,改了就改了,刪了就刪了

提醒

因為 . 點開頭的是 linux 的隱藏檔或隱藏資料夾,輸入 lsls -l 會發現看不到他

這時候要加入 a 參數,也就是 ls -als -al 就可以看到他囉

其他已存在的資料夾想加入 git 就直接在該資料夾內輸入 git init 即可

查看 git 狀態

接下來要做什麼呢?先來看一下目前 practice 的 git 狀態

$ git status
 On branch master                                                                

 No commits yet                                                                  

 nothing to commit (create/copy files and use "git add" to track)                

上面是說,目前我們在 master 分支,這是一開始的主要分支,

沒有需要提交(commit) 的檔案,你可以輸入 git add 來將檔案加入追蹤

細節我們會在之後補充,目前先讓大家熟悉整個 git 的流程就好

把檔案交給 git 追蹤

我們在 practice 內建立一個新檔案,檔名為 welcome.txt 內容寫 你好

git bash 中可以用 vim 或 notepad 編輯器等方式完成這件事

$ vim welcome.txt
# 看到畫面一片空白,表示已經進入 vim 

i 切換成插入模式

輸入 你好

按 esc 鍵切換回普通模式

輸入 :wq 並按 enter 存檔離開回到 $ 提示符號

如果不想用編輯器的話,可以直接用一行指令完成這件事

$ echo '你好' > welcome.txt

原本 echo 是把字印在畫面上,加上大於就是把前面的字串輸入到檔案中,

所以大於後面接了檔名就能夠把資訊輸入到檔案中了

小心,如果檔案存在的話會直接被蓋掉喔

編輯好後再來看看 git 狀態

$ git status
 On branch master                                                                

 No commits yet                                                                  

 Untracked files:                                                                
   (use "git add <file>..." to include in what will be committed)                
         welcome.txt                                                             

 nothing added to commit but untracked files present (use "git add" to track)    

重複的我們就不解釋了,看到 Untracked files 就表示有一些檔案還沒有被加入追蹤

其實他都有建議的下一步動作,訊息還滿清楚的

所以,git 是不會自動幫我們記錄的,需要我們手動加入追蹤

因為可能有不同的需求,自動記錄的話主動權就尚失了,這個之後再說

$ git add welcome.txt

加入後再來確認目前的 git 狀態

$ git status                                                                    
 On branch master                                                                

 No commits yet                                                                  

 Changes to be committed:                                                        
   (use "git rm --cached <file>..." to unstage)                                  
         new file:   welcome.txt                                                 

沒有 Untracked 了,變成 new file 表示新建的檔案 welcome.txt 已經被追蹤了,只是還沒提交而已

他目前在暫存區(Staging Area) 如果提交了才會被放到儲存庫裡

提醒

git add 就跟 ls, copy 等這些指令一樣可以使用萬用字元

像是 git add *.txt 等一次加入多個檔案

使用 git add .git add --all 會加入該資料夾下包含所有子資料夾與檔案到追蹤清單

這兩個參數有一點點不同,--all 不管在哪個資料夾下,都會把 git init 初始化資料夾下含所有子資料夾之檔案加入追蹤

. 只會加入該資料夾下所有子資料夾之檔案到追蹤清單

所以在 git init 的那層為根目錄(資料夾)的話,輸入 git add . 就會加入該資料夾下所有檔案與資料夾到追蹤清單

這時候 .--all 是完全相同的

相對的如果只是在某個子資料夾用 . 加入追蹤的話,那麼上一層的資料就不會被加入了

狀況

做好 git add 的檔案再次編輯後還想加入追蹤則還需要再次 git add

否則直接提交的話會是前一次 git add 的內容而已,還沒 git add 的就不會被提交到儲存庫

我們再次編輯 welcome.txt 再第二行加入 我很好

# 變成兩個大於,就是直接在檔案後面添加資訊
$ echo '我很好' >> welcome.txt
# 再來看一下狀態
$ git status
 On branch master                                                                

 No commits yet                                                                  

 Changes to be committed:                                                        
   (use "git rm --cached <file>..." to unstage)                                  
         new file:   welcome.txt                                                 

 Changes not staged for commit:                                                  
   (use "git add <file>..." to update what will be committed)                    
   (use "git restore <file>..." to discard changes in working directory)         
         modified:   welcome.txt                                                 

看起來好像有兩個 welcome.txt 檔案,後面的狀態是 modified

並且提醒我們是要再 git add 還是想回到之前的版本等等

仔細看訊息其實就可以知道目前檔案的狀態,以及應該要做什麼事情

那就再次 git add . 加入追蹤

$ git add .
$ git status
 On branch master                                                                

 No commits yet                                                                  

 Changes to be committed:                                                        
   (use "git rm --cached <file>..." to unstage)                                  
         new file:   welcome.txt                                                 

好了,準備提交吧

提交到儲存庫裡存檔

想要將資訊從暫存區永久存放至儲存庫(倉庫)還需要最後一個動作,也就是提交

commit 就是提交指令,-m 參數後面用引號包住文字訊息

如果只輸入 git commit 應該會開啟預設編輯器讓你輸入提交的文字訊息

$  git commit -m '加入git並新增welcome.txt檔案'                                 
 [master (root-commit) 0fdb52f] 加入git並新增welcome.txt檔案                     
  1 file changed, 2 insertions(+)                                                
  create mode 100644 welcome.txt                                                 

從上面的資訊至少可以了解到:

  • 這是主要(master) 分支,產生的版號是 0fdb52f 接著是我們寫的提交訊息
  • 有 1 個檔案中的 2 行被提交
  • 看到 create 表示有新的檔案被建立,是之前沒有的,最後是權限跟檔名

從這些資訊我們也可以知道剛剛做了哪些事情

我覺得看到很多改變會突然覺得很有成就感

提交訊息的建議:

  1. 簡單易懂就好
  2. 避免情緒性文字,以免團隊合作時產生不必要的問題
  3. 避免不清楚或不完整的資訊,如:修改檔案或新增文字

提交時只會處理暫存區的資訊到儲存庫,這也就是我們剛剛提到的

沒有 git add 的資訊是不會被儲存下來的

完成提交才是完成整個 git 一般流程

提示

如果沒東西也想提交的話可以使用 --allow-empty 參數

# 看一下剛剛完成提交的狀態
$ git status
 On branch master                                                                
 nothing to commit, working tree clean                                           
# 沒東西,來提交看看
$ git commit -m '沒東西'                                                        
 On branch master                                                                
 nothing to commit, working tree clean                                           
# 沒東西硬是要提交 
$ git commit --allow-empty -m '沒東西'                                          
 [master 462682d] 沒東西                                                         

雖然提交空的沒什麼意義,不過在測試合併時可能會需要這樣做

還有一些特殊狀況,就是想要有一筆紀錄時也會這樣做

補充

想要在 git bash 貼上的話,可以直接按快顯鍵,並使用下方向鍵找到 paste 按 enter

後面也有列出快速鍵 shift+insert 如果 insert被設定成 NVDA 鍵那就要連按兩下囉

所以這個環境不能按 ctrl+v 貼上喔

結論

  • 初始化被 git 版控 git init 只要做一次就好
  • 讓 git 追蹤所有內容 git add .
  • 提交這次的追蹤內容到倉庫 git commit -m '訊息'
  • 經常使用 git status 來確認目前的 git 狀態

留言

#1

coscell

coscell圖像(預設)

2020-02-17 20:10:45

From:180.176.111.5

可以改用 Windows 的命令視窗來執行 git 指令,這裡就能方便剪貼了。

#2

阿慶

阿慶圖像

2020-02-17 20:17:51

From:122.116.71.150

這樣就沒有 unix 那些指令了
比如 vim, touch 這類的
當然 ls, cp, mv, rm 在 cmd 有相應的指令能用,應該還好

#3

特種兵

特種兵圖像(預設)

2020-02-20 20:01:46

From:211.23.21.202

在win7就算是cli也是沒辦法直接複製貼上,需要使用alt+空白的系統功能表選擇編輯中的貼上才行
win10的話就可以直接ctrl+v貼上了
然後cli不能打中文,所以到時要輸入 commit 用中文的話在傳統 cli 模式也很麻煩
所以還是建議 git bash

#4

coscell

coscell圖像(預設)

2020-02-21 15:56:39

From:180.176.111.5

我可以打中文啊

#5

阿慶

阿慶圖像

2020-02-25 23:03:33

From:122.116.71.150

不知是否跟我安裝時選了 TrueType 字體有關,只有在 git bash 才能正確顯示中文
在 cmd 打 git log --oneline 就變成像這樣

9509ba1 12-1 <E5><AE><8C><E6><88><90>

顯示的是 utf-8 編碼字節,而不是中文
我記得之前在 cmd 也可以顯示中文才對
到了 git bash 就正常了

9509ba1 12-1 完成

看來既然 git 有 bash 舊用 bash 吧

#6

coscell

coscell圖像(預設)

2020-02-29 07:08:13

From:180.176.111.5

請問 commit message 打錯要如何修改?

#7

coscell

coscell圖像(預設)

2020-02-29 08:07:58

From:180.176.111.5

找到答案了: git commit --amend

#8

特種兵

特種兵圖像(預設)

2020-03-01 00:14:01

From:1.161.143.134

下一篇就是了