Git 時間,版本控制工具進階

        在上一次的 Git 時間裏,我們學習了關於 Git 最基本的用法,包括安裝 Git、創建代碼倉庫,以及提交本地代碼。本節中我們將要學習更多的使用技巧,不過在開始之前先要把準備工作做好。

        所謂的準備工作就是要給一個項目創建代碼倉庫,這裏就選擇在 ProviderTest 項目中創建吧,打開 Git Bash,進入到這個項目的根目錄下面,然後執行 git init 命令,如圖 7.7 所示。

圖 7.7

        這樣準備工作就已經完成了,讓我們繼續開始 Git 之旅吧。

1.  忽略文件

        代碼倉庫現在已經是創建好了,接下來我們應該去提交 ProviderTest 項目中的代碼。不過在提交之前你也許應該思考一下,是不是所有的文件都需要加入到版本控制當中呢

        在 Android 項目目錄結構 中介紹 Android 項目結構的時候有提到過,bin 目錄和 gen 目錄下的文件都是會自動生成的,我們不應該將這部分文件添加到版本控制當衆,否則有可能會對文件的自動生成造成影響,那麼如何才能實現這樣的效果呢?

        Git 提供了一種可配性很強的機制來允許用戶將指定的文件或目錄排除在版本控制之外,它會檢查代碼倉庫的根目錄下是否存在一個名爲 .gitigonre 的文件,如果存在的話就去一行行讀取這個文件的內容,並把每一行指定的文件或目錄排除在版本控制之外。注意 .gitignore 中指定的文件或目錄是可以使用 “*” 通配符的。

        現在,我們在 ProviderTest 項目的根目錄下創建一個名爲 .gitignore 的文件,然後編輯這個文件的內容,如圖 7.8 所示。

圖 7.8

        這樣就表示把 bin 目錄和 gen 目錄下的所有文件都忽略掉,從而使用得它們不會加入到版本控制當中。

        排除了 bin 和 gen 這兩個目錄以後,我們就可以提交代碼了,先使用 add 命令將所有的文件進行添加,如下所示:

git add .

        然後執行 commit 命令完成提交,如下所示:

git commit -m "First commit."

2.  查看修改內容

        在進行了第一次代碼提交之後,我們後面還可能會對項目不斷地進行維護,添加新功能等。比較理想的情況是每當完成了一小塊功能,就執行一次提交。但是當某個功能牽扯到的代碼比較多的時候,有可能寫到後面的時候我們就已經忘記前面修改了什麼東西了。遇到這種情況時不用擔心,Git 全部都幫你記着呢!下面我們就來學習一下,如果使用 Git 來查看自上次提交後文件修改的內容。

        查看文件修改情況的方法非常簡單,只需要使用 status 命令就可以了,在項目的根目錄下輸入如下命令:

git status

        然後 Git 會提示目前項目中沒有任何可提交的文件,因爲我們剛剛纔提交過嘛。現在對 ProviderTest 項目中的代碼稍做一下改動,修改 MainActivity 中的代碼,如下所示:

public class MainActivity extends Activity {
	......
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		......
		addData.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				......
				values.put("price", 22.85);
				......
			}
		});
		......
	}

}

        這裏僅僅是在添加數據的時候,將書的價格由 55.55 改成了 22.85。然後重新輸入 git status 命令,這次結果如圖 7.9 所示。

圖 7.9

        可以看到,Git 提醒我們 MainActivity.java 這個文件已經發生了更改,那麼如何才能看到更改的內容呢?這就需要藉助 diff 命令了,用法如下所示:

git diff

        這樣可以查看到所有文件的更改內容,如果你只想查看 MainActivity.java 這個文件的更改內容,可以使用如下命令:

git diff src/com/example/providertest/MainActivity.java

        命令的執行結果如圖 7.10 所示。

圖 7.10

        其中,減號代表刪除的部分,加號代表添加的部分。從圖中我們可以明顯地看出,書的價格由 55.85 被修改成了 22.85。

3.  撤銷未提交的修改

        有的時候我們代碼可能會寫得過於草率,以至於原本正常的功能,結果反倒被我們改出了問題。遇到這種情況時也不用着急,因爲只要代碼還未提交,所有修改的內容都是可以撤銷的。

        比如在上一小節中我們修改了 MainActivity 裏一本書的價格,現在如果想要撤銷這個修改就可以使用 checkout 命令,用法如下所示:

git checkout src/com/example/providertest/MainActivity.java

        執行了這個命令之後,我們對 MainActivity.java 這個文件所做的一切修改就應該都被撤銷了。重新運行 git status 命令檢查一下,結果如圖 7.11 所示。

圖 7.11

        可以看到,當前項目中沒有任何可提交的文件,說明撤銷操作確實是成功了。

        不過這種撤銷方式只適用於那些還沒有執行過 add 命令的文件,如果某個文件已經被添加過了,這種方式就無法撤銷其更改的內容,我們來做個試驗瞧一瞧。

        首先仍然是將 MainActivity 中那本書的價格改成 22.85,然後輸入如下命令:

git add .

        這樣就把所有修改的文件都進行了添加,可以輸入 git status 來檢查一下,結果如圖 7.12 所示。

圖 7.12

        現在我們再執行一遍 checkout 命令,你會發現 MainActivity 仍然處於添加狀態,所修改的內容無法撤銷掉。

        這種情況應該怎麼辦?難道我們還沒法後悔了?當然不是,只不過對於已添加的文件我們先對其取消添加,然後纔可以撤回提交。取消添加使用的是 reset 命令,用法如下所示:

git reset HEAD src/com/example/providertest/MainActivity.java

        然後再運行一遍 git status 命令,你就會發現 MainActivity.java 這個文件重新變回了未添加狀態,此時就可以使用 checkout 命令來將修改的內容進行撤銷了。

4.  查看提交記錄

        當 ProviderTest 這個項目開發了幾個月之後,我們可能已經執行過上百次的提交操作了,這個時候估計你早就已經忘記每次提交都修改了哪些內容。不過沒關係,忠實的 Git 一直都幫我們清清楚楚地記錄着呢!可以使用 log 命令查看歷史提交信息,用法如下所示:

git log

        由於目前我們只執行過一次提交,所以能看到的信息很少,如圖 7.13 所示。

圖 7.13

        可以看到,每次提交記錄都會包含提交 id、提交人、提交日期,以及提交描述這四個信息。那麼我們再次將書價修改成 22.85,然後執行一次提交操作,如下所示:

git add .
git commit -m "Change price."

        現在重新執行 git log 命令,結果如圖 7.14 所示。

圖 7.14

        當提交記錄非常多的時候,如果我們只想查看其中一條記錄,可以在命令中指定該記錄的 id,並加上-1 參數表示我們只想看到一行記錄,如下所示:

git log 956e5901096526cafe68d6b5e203821aaedf691 -1

        而如果想要看出這條提交記錄具體修改了什麼內容,可以在命令中加入 -p 參數,命令如下:

git log 956e5901096526cafe68d6b5e203821aaedf691 -1 -p

        查詢出的結果如圖 7.15 所示,其中減號代表刪除的部分,加號代表添加的部分。

圖 7.15

        好了,本次的 Git 時間就到這裏。

摘自《第一行代碼》


發佈了64 篇原創文章 · 獲贊 14 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章