[Git]主題2: Git的相關指令

上一篇

延續上一篇的基本指令, 這裡介紹更多Git的操作指令

git config -l/ git config –unset / git config alias 指令

開啟到Git bash環境下, 輸入以下指令,

$git config -l

就可以看到三個設定檔呈現在A/B/C區域中, 優先權以A最低, B次高, C最高!

A區為–>安裝Git路徑裡的/mingw64/etc/gitconfig, 也可以利用下面各區域指令查詢.

$git config –system -l

B區為–>登入帳號的home directory裡的.gitconfig

$git config –global -l

C區為–>檔案庫資料夾裡的.git/config檔

$git config –local -l

一般是直接操作C區裡的相關config指令, 在這裡已經利用下面指令增加了一組新的user.name 和user.email

$git config –local user.name ‘test123’

$git config –local user.email ‘test123@gmail.com’ 

主要用意是,當推送進檔案庫時, 就不需要在使用git commit時, 多加–author指令來設定使用者名稱與email.而且也可以隨意更改不同的名稱與email.

如果要取消此使用者名稱或email,也可以利用下面指令完成.

$git config –unset user.name 

$git config –unset user.email 

有時會遇到指令比較長, 如果打字慢的, 很會浪費時間, 也容易打錯, 所以可以利alias別名的功能來簡化指令的輸入.

$git config alias.s ‘status’  //利用alias的別名s, 來代替status這一個完整的指令.

在圖中的最後一行就可以看到, 當用此指令時, 就可以簡少打指令的時間, 如果要移除, 一樣用–unset指令就可以了!

$git s

$git config –unset alias.s 

一般安裝好Git程式時, 其實都是用預設的帳號名稱去使用, 也就是B區的帳號名稱,但為了比較有彈性的操作, 所以利用以上相關指令去增加不同帳號名稱使用.

 

diff

一開始在windows環境下C:\test 資料夾中, 建立二個文字檔, 裡面各自加入一行英文字.

此時就可以用diff 的指令去比較二個文字的差異性了, 此指令目前不支援中文, 之後會有git UI畫面介紹, 所以現在大約了解一下就可以了! 畢竟git 的指令很多, 無法一一完整描述. 輸入以下指令就會顯示出二個檔案的相關差異了.

$diff content3.txt content4.txt

 

touch .gitignore

$touch .gitignore   //新增一個忽略的檔案, 沒有副檔名,  .gitignore的檔案中也要把自己加入.

—  .gitignore —

.gitignore

Folder/    //它是資料夾, 如果名稱之後有一個 ” / ” 反斜線的話.

touch指令會新增一個空檔案, 也就是沒有內容的檔案, 然後把本身的檔名也要加入, 和增加要忽略的檔案名稱或資料夾名稱, 用意為–>在.gitignore檔案裡中的任何檔案(資料夾)都不會被git指令所建立索引與推進資料庫.

 

log

$git log –author=’t’     //列出只有以t開頭的人名所執行的commit

$ git log –shortstat   //顯示簡略的log檔內容

一個指令內, 一定會有各式不同的參數可供使用!

 

branch

這是其中一個很重要的功能, 當一個專案的進行時, 建立一個branch(分支)時, 可以在另一個地方去新增專案所需要的功能, 在完成這一部份時, 可以再透過merge或 rebase指令做合併, 即使要被合併的主線也有更新, 也並不會影響.

但如果Git的檔案庫是在遠端的伺服器上,就不適合執行rebase指令了!

下面列出部份相關指令的用法.

$git branch  //列出所有的分支

$git branch three //建立新的分支”three”

$git checkout  分支名稱 //切換到不同的分支名稱

$git branch  third second   //在”second”分支中, 再建立一個”third”分支

$git checkout -b second  //建立一個新的分支(second), 然後直接切換過去新的分支

$ gitk –all &  //以背景模式啟動Git圖示介面,而且可以看到全部分支

$ git branch -d 要刪除的分支名稱

–>$ git branch -d third

$touch content5.txt //此時已經切換到second分支

$git add . 

$git commit -m ‘第二分支中建立一個content5的文字檔’

$gitk

下圖顯示, 目前利用上面相關指令所產生的’second’第二個分支時, 所增加的content5這個文字檔.

rebase

$git checkout second //切換到second分支上

$git rebase master //將主分支master同步到目前分支所在的分支

 

reset

$git reset commit節點

執行上面的指令之後, 可以回到rebase之前的節點!


 

到目前為止, 了解git許多指令的用法, 但並沒有包含全部指令的介紹!如有興趣者, 可以利用Google搜尋[Git],相信可以找到更多內容去學習.

這裡用一個簡單的例子來說明開發專案時, 如何利用這些指令來做學習,下一篇也將會使用git UI的程式,用圖解的方法來介紹使用git!

專案開始階段需要下列幾個項目工作:

1.建立一個新的程式專案, 例如:Android Studio 的工作環境. //cd (進入程式專案的資料夾路徑), 利用git bash的指令去操作

2.初使化專案的git 檔案庫. //git init

3.編輯.gitignore檔案. //排除不必要存入git檔案庫的檔案和資料夾. //Android Studio的工作環境, 會自動產生此檔案.

4.建立開發程式專案用的分支.  //一般都會有其他分支, 方便在開發專案時另外在新增功能用, 或是debug, 或是其他作用, 最後在分支完成的功能, 再利用merge或是rebase去做合併於主專案的分支, 而完成開發專案的工作.

 

下圖為使用git bash環境中, 使用指令方式去建立git檔案庫. 可以在圖中看到已經先在windows環境中利用Android Studio先建立一個新專案, 資料夾名稱叫(android_app). 一開始先切換到此專案的工作路徑.

$cd C:/test/android_app  //C槽內的test資料夾中的android_app

$git init  //初使化的git 檔案庫

$git status //此時可以看到目前有些檔案/資料夾還沒有送進檔案庫中. (後面有一個反斜線為資料夾)

$git add . //將上圖的untracked files 送入索引區

$git status  //此時可以看到目前已送入索引區, 但還沒有送進檔案庫中!

$git commit -m ‘The first init’  //第一次加入節點內容,送入檔案庫裡.

此時在Android Studio環境中, 隨意加入一個功能.

在git環境中,可以利用git status發現檔案庫中, 有哪些檔案已變更了, git bash的程式可以不需要一直開著, 只要當檔案庫中有任何異變, git 都會察覺到, 此時一樣和一開始用git add . 然後再一個git commit -m ‘XXXX’ 就完成此次變更的推送到資料庫中了!

到目前為止依舊在master分支上作業, 這裡新增加一個開發專案的分支”testing’, 同時也立即切換過去.

$git checkout -b testing

然後一樣在Android Studio環境中再增加一個功能, 或任何變動, 利用git status依然可以看到哪些有變動了!

和剛才一樣, 用git add . ,然後再一個git commit -m ‘XXXX’ 就完成此次變更的推送到資料庫中了!

最後在分支testing上, 完成工作之後,然後利用merge合併到主分支master.

$git branch //一開始先確認目前分支的所在, 以及共有幾個分支名稱

$git checkout master //切換到master主分支上.

$git merge –no-ff testing //將分支testing, 合併到主分支master上.也就是不要用(Fast-forward merge)快轉合併, 但它是會產生一個commit節點

此時就利用gitk圖形介面可以看到, 在圖的下面, testing這個分支已經合到master裡了!

到目前為止, 都是屬於單人的開發模式來示範, git強大的管理能力是在多人的同時使用, 以及遠端存取, 使用方式也是用類似的觀念來操作, 下篇會再說明如何利用git UI來管理.

 

<< 第三篇>>

Share via:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端