Git時間——初識版本控制工具
安裝
在Git官網(wǎng)下載相應(yīng)系統(tǒng)和版本的安裝包。
配置身份,區(qū)分誰提交了代碼
git config --global user.name "你的名字"
git config --global user.email "你的郵箱"
查看是否配置成功
git config --global user.name
git config --global user.email
創(chuàng)建代碼倉庫
進(jìn)入需要創(chuàng)建代碼倉庫的項目的根目錄,如AccountingApp,所有本地代碼提交的代碼會被提交到代碼倉庫中,如果有需要也可以推送到遠(yuǎn)程代碼倉庫中,執(zhí)行以下命令:
git init
執(zhí)行后在其根目錄會生成一個隱藏的.git文件夾,用來記錄本地所有的git操作,可通過ls-al命令來查看。
ls -al

如果想要刪除本地倉庫,只需要刪除這個文件夾就行了。
提交本地代碼
提交代碼主要用到兩個命令——add和commit。
add用于把想要提交的代碼先添加進(jìn)去。
commit則是真正地去執(zhí)行提交操作。
git add build.gradle // 添加build.gradle;添加單個文件
git add app // 添加app這個目錄;添加一個目錄
git add . // 添加該項目下所有的文件;添加所有文件
git commit -m "First commit." // 真正提交代碼;-m參數(shù)表示為該次提交添加信息描述,若沒有會被認(rèn)為是不合法的
Git時間——版本控制工具進(jìn)階
忽略文件
項目里的所有文件并不是都需要提交的。AS生成的項目中存在兩個.gitignore文件,一個在根目錄下,一個在app模塊下,該文件是用來告訴git那些文件不需要提交,每一行代表要忽略的文件或是一類文件。配置好后,直接提交即可。
查看修改內(nèi)容
查看文件修改情況的方法非常簡單,只需要使用status命令就可以了,在項目的根目錄下輸入如下命令:
git status
比如修改MainActivity.java這個文件,然后執(zhí)行git status命令。
如何才能看到更改的內(nèi)容呢?這就需要借助diff命令了,用法如下:
// 查看所有文件的更改內(nèi)容
git diff
// 查看指定文件的更改內(nèi)容,如MainActivity.java
git diff app/src/main/java/com/jwstudio/accountingapp/MainActivity.java
其中,減號代表刪除部分,加號代表添加部分。
撤銷為提交的修改
有時候我們的代碼可能會寫得過于草率,以至于原本正常的功能,結(jié)果反倒被我們改出了問題。遇到這種情況時也不用著急,因為只要代碼還未提交,所有修改的內(nèi)容都是可以撤銷的。
比如之前修改的MainActivity.java,可以使用checkout命令,用法如下所示:
git checkout app/src/main/java/com/jwstudio/accountingapp/MainActivity.java
重新運行git staus命令檢查一下。
不過這種撤銷方式只適用于那些沒有執(zhí)行過add命令的文件,如果某個文件被添加過了,這種方式就無法撤銷其更改內(nèi)容。
只不過對于已添加的文件我們應(yīng)該先對其取消添加,然后才可以撤回提交。取消添加使用的是reset命令,用法如下所示:
git reset HEAD app/src/main/java/com/jwstudio/accountingapp/MainActivity.java
然后運行一遍git status命令,之后再執(zhí)行checkout操作。
查看提交記錄
可以使用log命令查看歷史提交信息,用法如下所示:
git log

可以看到,每次提交記錄都會包含提交id、提交人、提交日期以及提交描述4個信息。
當(dāng)提交記錄非常多的時候,如果我們只想查看其中一條記錄,可以在命令中指定該記錄的id,并加上-1參數(shù)表示我們只想看到一行記錄,如下所示:
git log 52e3d157982aeb0810532a0aebed519915d5e2ae -1
而如果想要查看這條提交記錄具體修改了什么內(nèi)容,可以在命令中加入-p參數(shù),命令如下:
git log 52e3d157982aeb0810532a0aebed519915d5e2ae -1 -p
Git時間——版本控制工具的高級用法
準(zhǔn)備階段:進(jìn)入一個新的項目的根目錄,然后打開Git Bash,然后執(zhí)行提交操作:
git init
git add .
git commit -m "First Commit."
分支的用法
分支是版本控制工具中比較高級且比較重要的一個概念,它主要的作用就是在現(xiàn)有代碼的基礎(chǔ)上開辟一個分叉口,使得代碼可以在主干線和分支線上同時進(jìn)行開發(fā),且相互之間不會影響。
如果想要查看當(dāng)前的版本當(dāng)中有哪些分支,可以使用以下命令:
git branch


創(chuàng)建一個分支,命令如下:
git branch version1.0 // 名為version1.0的分支
分支前面的“*”號表示我們的操作還是在該分支上,可以使用以下命令進(jìn)行切換:
git checkout version1.0 // 切換到分支version1.0上
各分支的操作互不影響。
可以使用以下命令對分支進(jìn)行合并:
git checkout master
git merge version1.0
僅僅這樣簡單的兩行命令,就可以把在version1.0分支上修改并提交的內(nèi)容合并到master分支上。當(dāng)然。在合并分支的時候還有可能出現(xiàn)沖突的情況,這個時候就需要靜下心來慢慢地找出并解決這些沖突。
可以使用如下命令將不要的分支刪除:
git branch -D version1.0
與遠(yuǎn)程版本庫協(xié)作
所有版本控制工具最重要的一個特點就是可以使用它來進(jìn)行團(tuán)隊合作開發(fā)。每個人的電腦上都會有一份代碼,當(dāng)團(tuán)隊的某個成員在自己的電腦上編寫完成了某個功能后,就將代碼提交到服務(wù)器,其他成員只需要將服務(wù)器上的代碼同步到本地,就能保證整個團(tuán)隊所有人的代碼都相同。
因此,需要有一個遠(yuǎn)程的版本庫!
以GitHub作為示例:
- 登錄GitHub,若沒有賬號注冊一個。
- 點擊右上角“加號”,選擇“New repository”,然后填寫“Repository name”,還有填寫描述“Description”,public和private表示是公開還是私有的。

- 創(chuàng)建完成后,復(fù)制Git地址,比如https://github.com/example/test.git,有HTTP和SSH兩種方式。

- 執(zhí)行以下命令:
git init
git add .
git commit -m "First Commit."
git remote add origin https://github.com/example/test.git // 與GitHub進(jìn)行關(guān)聯(lián)
git push -u origin master // 會提示讓你使用GitHub賬號登錄
- 在GitHub上刷新下,會發(fā)現(xiàn)本地代碼已成功上傳。
- 大致的流程就是這樣子,可以根據(jù)需求更改。
其中,origin部分指定的遠(yuǎn)程版本庫的Git地址,master部分指定的是同步到哪一個分支上。
比如說現(xiàn)在有一個遠(yuǎn)程版本庫的Git地址是https://github.com/example/test.git,就可以使用如下命令將代碼下載到本地:
git clone https://github.com/example/test.git
接下來看一下如何將遠(yuǎn)程版本庫下的修改同步到本地。Git提供了兩種命令來完成此功能,分別是fetch和pull,fetch的語法規(guī)則和push是差不多的,如下所示:
git fetch origin master // origin含義同上
執(zhí)行這個命令后,就會將遠(yuǎn)程版本庫上的代碼同步到本地,不過同步下來的代碼并不會合并到任何分支上,而是會存放到一個origin/master分支上,這是可以通過diff命令來查看遠(yuǎn)程版本庫上到底修改了那些東西:
git diff origin/master
之后在調(diào)用merge命令將origin/master分支上的修改合并到主分支上即可,如下所示:
git merge origin master
而pull命令則是相當(dāng)于將fetch和merge這兩個命令放在一起執(zhí)行了,它可以從遠(yuǎn)程版本庫上獲取最新的代碼并且合并到本地,如法如下所示:
git pull origin master
Git時間——將代碼托管到GitHub上
可以使用一個新的項目從頭到尾進(jìn)行實戰(zhàn)!
補充
- 廖雪峰-Git教程
-
git commit --amend:既可以對上次提交的內(nèi)容進(jìn)行修改,也可以修改提交說明。需要先對修改后的代碼進(jìn)行手動git add,再執(zhí)行命令。執(zhí)行該命令后,直接push一般會失敗,原因是分支落后,可以解決問題后再push;也可以使用強推git push --force-with-lease origin 遠(yuǎn)程分支名稱。(參考博客) - 撤銷push,并同步到遠(yuǎn)程
-
git revert <commitId>:撤銷指定的commit,對其它commit沒影響 -
git stash:暫存當(dāng)前分支的改動,針對還沒開發(fā)完的分支 -
git stash pop:恢復(fù)當(dāng)前分支的改動 -
git stash list:查看是否有stash操作 -
reset:在本地reset后,同步到遠(yuǎn)程倉庫參考博客