Android开发学习之路-Git的极简教程?
Git是一個代碼版本管理工具,也就是允許我們的一個項目擁有多個版本,這樣我們可以隨心所欲的修改我們的代碼,如果出現(xiàn)問題,可以回退到某一個提交點。如果你還在用一堆堆注釋來更新你的代碼,那么可以嘗試一下Git了,畢竟,它不難。
常用的Git操作其實不多,明白這個過程就行了。
※ 關(guān)于Git的安裝畢竟簡單,所以這里就不說了。沒錢買mac,所以......
簡單的流程:初始化->修改文件->添加至?xí)捍鎱^(qū)->提交修改->回退
安裝完畢后,需要先設(shè)置用戶名和郵箱,在桌面中右鍵選擇Git Bash Here,會打開一個小黑窗如圖:
輸入如下命令進(jìn)行設(shè)置即可:
$ git config --global user.name "XXX" $ git config --global user.email "xxx@yyy.com"① 初始化:git init
先進(jìn)入工程的目錄,這里的Demo是在D:\GitDemoProject目錄下,項目暫時為空,也可以用Studio直接建一個HelloWorld。
在項目根目錄右鍵,選擇Git Bash Here打開命令窗口。
我們的所有命令都是在這個窗口輸入。
接著輸入:git init 然后回車,會有如下提示:
$ git init Initialized empty Git repository in D:/GitDemoProject/.git/這樣我們的初始化就完成了,項目下會多出一個.git文件夾。
② 創(chuàng)建一個文件
如果熟悉Linux,可以直接用這個Bash來touch一個文件,我們這里直接右鍵創(chuàng)建一個test.txt文件并輸入:Hello Git
這里介紹一個命令:git status,在Bash輸入會得到如下提示:
$ git status On branch masterInitial commitUntracked files:(use "git add <file>..." to include in what will be committed)test.txtnothing added to commit but untracked files present (use "git add" to track)最后一行提示我們,沒有文件添加至跟蹤狀態(tài),但是發(fā)現(xiàn)了新建的未跟蹤文件。
③ 添加至?xí)捍鎱^(qū)
上面新建的文件就是在暫存區(qū)之外的,這些文件不會被Git控制,也就是目前我們的Git實際上還沒有保存任何關(guān)于這個文件的數(shù)據(jù)。我們需要讓Git知道,這個文件是需要被標(biāo)記的,如果它有任何修改,告訴我。
添加至?xí)捍鎱^(qū)的命令:git add 文件名
$ git add test.txt這個時候再查看一下狀態(tài):
$ git status On branch masterInitial commitChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: test.txt我們的文件狀態(tài)不再是Untracked了。
④ 提交修改
命令:git commit -m "xxx"
xxx指的是這次提交的消息,用簡短明了的一句話描述這詞提交的內(nèi)容可以幫助我們快速的進(jìn)行版本切換。
$ git commit -m "first commit" [master (root-commit) 5b59dc7] first commit1 file changed, 1 insertion(+)create mode 100644 test.txt這個時候,我們就完成了一次提交了。目前為之,整個項目的當(dāng)前版本已經(jīng)被Git保存起來了,在有需要的時候可以進(jìn)行回退。
現(xiàn)在再看看狀態(tài):
$ git status On branch master nothing to commit, working directory clean提示我們沒有東西可以提交,這個時候只要被跟蹤的文件發(fā)生改變,這個狀態(tài)才會發(fā)生改變。
我們來試一下!
我們打開test.txt文件并修改一下它的內(nèi)容為:Hello Android
接著重新查看狀態(tài):
$ git status On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: test.txtno changes added to commit (use "git add" and/or "git commit -a")現(xiàn)在我們被告知,有文件發(fā)生了改變(modified),需要重新添加至?xí)捍鎱^(qū)才能提交。
但是先不要著急,我們再新建一個文件名為readme.txt,不需要添加任何內(nèi)容。
這個時候再執(zhí)行一次git status查看狀態(tài):
$ git status On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: test.txtUntracked files:(use "git add <file>..." to include in what will be committed)readme.txtno changes added to commit (use "git add" and/or "git commit -a")可以看到,新建的文件狀態(tài)為Untracked,這個時候,我們需要先把這兩個文件添加至?xí)捍鎱^(qū),才可以進(jìn)行提交,直接將這兩個文件添加至?xí)捍鎱^(qū)的命令是git add .
$ git add .這個命令是把目錄下所有的文件都添加至?xí)捍鎱^(qū)。
接著查看狀態(tài):
$ git status On branch master Changes to be committed:(use "git reset HEAD <file>..." to unstage)new file: readme.txtmodified: test.txt這個時候就可以進(jìn)行第二次的提交了,我們直接輸入:git commit命令,注意不輸入-m "xxx",窗口會跳轉(zhuǎn)到如下所示的地方:
這里就需要一點vim的知識了,這個文件其實就是用來表示文件提交的內(nèi)容的,所有以#開頭的行都會被忽略,所以我們可以另開一行來編寫我們的提交信息。這里不懂的話可以直接用-m來代替。
修改完并保存好會回到原來的地方:
$ git commit [master ea017b6] create readme.txt and modified the test.txt2 files changed, 1 insertion(+), 1 deletion(-)create mode 100644 readme.txt⑤ 回退
假設(shè)我們現(xiàn)在發(fā)現(xiàn),第二次的提交是有問題的,我們需要回到第一次提交的地方,要怎么做呢?
這里我們可以使用git reset命令,這個命令需要我們填入一個表示回退點的值,這樣才能確認(rèn)回退到的地點。而這個值,可以通過git log來查看:
$ git log commit ea017b63e4043e7750efd2eb39f39d5668b69ec4 Author: Fndroid <1603808949@qq.com> Date: Fri Aug 12 21:25:03 2016 +0800create readme.txt and modified the test.txtcommit 5b59dc7a5aa1338b06f107dea6492842a5c3286d Author: Fndroid <1603808949@qq.com> Date: Fri Aug 12 21:02:30 2016 +0800first commit可以看到,我們提交了兩次,每次的commit后面有一串長長的時間點哈希值,我們可以根據(jù)這個哈希值回退到那一次的提交點:
$ git reset --hard 5b59dc7a5aa1338b06f107dea6492842a5c3286d HEAD is now at 5b59dc7 first commit這個時候,回到你的項目根目錄中可以看到,我們創(chuàng)建的readme.txt文件已經(jīng)不見了,而且,test.txt文件的內(nèi)容被還原為Hello Git
※ 回退操作會拋棄會退點以后的所有提交,所以,請謹(jǐn)慎。
到這里,整一個流程已經(jīng)走完了,我們已經(jīng)可以自如的控制這個工程的多個版本了。
?
分支
在上面的這個內(nèi)容中,我們的項目的不同版本是建立在一條直線上的,如果回退,那么在回退點的后所有的提交都會丟失,實際上還做不到隨心所欲,所以,分支就出來了。
我們可以通過git branch命令查看當(dāng)前所在的分支:
$ git branch * master*開頭的就是所在的分支,這里默認(rèn)的情況下只有一個master分支。
而一般的情況下,我們項目的穩(wěn)定版,都應(yīng)該是在這一個分支,而其他的新功能和bug修復(fù),可以新創(chuàng)建一些分支進(jìn)行,當(dāng)代碼完成并通過測試的時候,再和master分支合并來推進(jìn)整個開發(fā)的進(jìn)城。
在我們的Demo中,假設(shè)當(dāng)前的test.txt文件已經(jīng)是穩(wěn)定版(不要驚呆了),我們需要增加一些新功能(就隨便寫幾句話進(jìn)去而已),那么我們可以這樣做:
① 創(chuàng)建一個新的分支:git checkout -b 分支名
$ git checkout -b feature Switched to a new branch 'feature'這里創(chuàng)建了一個叫做feature的新分支,git自動幫我們切換到這個分支上了。
② 添加新功能
我們在test.txt文件中添加幾句話(代碼),這個隨意吧,例如我的:
③ add和commit
這里在新的分支中,和master分支的操作也是一樣的,我們提交一下這次更新,但是這次,我們可以謹(jǐn)慎一些。
在add之前,我們可通過git diff命令查看當(dāng)前做的改變:
$ git diff test.txt diff --git a/test.txt b/test.txt index e51ca0d..8612dc2 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,3 @@ -Hello Git \ No newline at end of file +Hello Git + +I am a good new feature. \ No newline at end of file確認(rèn)無誤之后,就可以add和commit了,養(yǎng)成使用diff和status命令的習(xí)慣是很好的。
$ git add test.txt $ git commit -m "add a new feature" [feature 60a91d1] add a new feature1 file changed, 3 insertions(+), 1 deletion(-)③ 切換分支
假設(shè)這個時候,我們想查看一下master分支的內(nèi)容,就需要進(jìn)行分支切換,代碼非常簡單:
$ git checkout master Switched to branch 'master'這個時候,可以查看一下我們的test.txt文件的內(nèi)容:
可以看到,切換回來之后,文件的內(nèi)容也被還原了,是不是很神奇。
④ 修改主分支
這里假設(shè),有同事對主分支進(jìn)行了修改,這個文件的內(nèi)容被改為“Hello Android”并且提交了。
$ git add . $ git commit -m "modified test.txt" [master 9f55797] modified test.txt1 file changed, 1 insertion(+), 1 deletion(-)⑤ 合并分支
假設(shè)我們覺得我們的feature分支修改沒問題也通過了測試,那么我們就可以把feature和master分支進(jìn)行合并了
※ 注意合并之前要先回到master分支,在master分支執(zhí)行合并命令,這里由于有③,就省略了。謹(jǐn)記。
我們執(zhí)行合并命令git merge 分支名:
$ git merge feature Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result.可以看到,有一個沖突發(fā)生了(CONFLICT),因為我們故意執(zhí)行了③,使得test.txt文件發(fā)生了改變。
如果我們的master分支在我們新建分支feature之后沒有進(jìn)行任何更改,這里就不會有沖突,但是一般不會這么理想,我們要介紹如何解決這個沖突。
⑥ 解決沖突
這個時候我們打開沖突對應(yīng)的文件test.txt
可以看到內(nèi)容發(fā)生變化了,不同分支的內(nèi)容使用“====”分隔開,這個時候我們就要判斷需要哪些內(nèi)容了,假設(shè)我們覺得feature分支的內(nèi)容是正確的,就可以直接在這個文件中更改,把多余的符號和字符刪除即可:
這個時候再進(jìn)行一次add和commit操作:
$ git add . $ git commit -m "fix conflict" [master d918a21] fix conflict可以看到?jīng)_突被修復(fù)了,這里再重新合并即可:
$ git merge feature Already up-to-date.⑦ 刪除多余分支
由于我們合并了feature分支,這個時候,feature分支已經(jīng)是多余的了,我們可以安全的把它刪除。
$ git branch -d feature Deleted branch feature (was 60a91d1).到這里,分支的內(nèi)容也基本掌握了,對于簡單的代碼管理,已經(jīng)沒有問題了。
?
實際上,每一個命令,都有其他一些參數(shù)和用法,如果要了解更多相關(guān)的,可以使用help命令,例如查看add命令的具體用法:
$ git --help add Launching default browser to display HTML ...會自動打開瀏覽器并顯示對應(yīng)命令的幫助文檔:
這個就需要自己閱讀了。
?
感謝支持。
?
轉(zhuǎn)載于:https://www.cnblogs.com/Fndroid/p/5766818.html
總結(jié)
以上是生活随笔為你收集整理的Android开发学习之路-Git的极简教程?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis-day1
- 下一篇: Android 闹钟最终版