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

[教學] git-7 開始 git

文章瀏覽次數 2704 文章回覆數 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 的隱藏檔或隱藏資料夾,輸入 ls 或 ls -l 會發現看不到他

這時候要加入 a 參數,也就是 ls -a 或 ls -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

下一篇就是了