1. 程式人生 > >Android studio中Git的學習和使用心得(二)在Android studio中如何使用Git進行程式碼回退與再提交

Android studio中Git的學習和使用心得(二)在Android studio中如何使用Git進行程式碼回退與再提交

這篇部落格是上篇部落格的進階,針對Android studio常用的Git使用情景進行總結。上篇部落格連結https://blog.csdn.net/qq_34820468/article/details/83416326。 下面我們來學習Android studio使用git的進階: 1、原生代碼(workspace)、本地倉庫(repository)、遠端倉庫(remote)的關係 在這裡插入圖片描述 上篇博文中我們演示的是add-commit-push,此外還有一個非常常用的是pull命令,將遠端倉庫的內容pull到本地 2、多人同時修改了同一檔案,在push時出現衝突的解決方法 工作過程中經常會出現這樣的狀況:你與同事同時進行開發,你們都有修改程式碼,如果你在push時你push的檔案與你同事之前push的內容有相同的某個檔案,那麼你的push必定會出錯,這時你就需要以下幾個步驟: (1)將自己修改的部分commit到本地倉庫 (2)pull遠端程式碼,pull成功之後,Android studio會提醒你需要merge,merge頁面分為三欄,左邊是你的修改,右邊是你同事所push的修改,中間是你們解衝突的結果,你需要對每一個衝突選擇接納與否,完成之後就可以確定了,你的原生代碼就會變成中間的這部分 (3)接下來就是將原生代碼進行commit和push了(如果push仍出錯,說明在你pull到push之間又有同事提交了與你修改了同一檔案的程式碼,你需要將最新的程式碼pull下來,並與你的程式碼進行merge之後才能成功push) 3、commit與push的關係

1)可能在push之前你已經commit了多次,那麼各個push檔案的最後一次commit(各檔案可能不是同一次)的結果,你可以理解為commit表示將修改儲存到本地倉庫,而push就是將本地倉庫所有的commit無一遺漏的全部都提交到遠端倉庫。例如,你第一次commit了檔案1、檔案2、檔案3,第二次commit了檔案1、檔案2,第三次commit了檔案1,那麼這時你push(無論你push時選擇了幾個檔案,push都會將上次push到這次push之間所有commit了的檔案置為最後一次commit的樣子)出去的檔案1是第三次commit的樣子,檔案2會是第二次commit的樣子,檔案3會是第一次commit的樣子。 2)push只會提交commit的修改結果,沒有提交到commit的修改不會push到遠端倉庫。例如,你在commit之後對程式碼進行了修改,接著push了,那麼這個修改不會push到遠端倉庫 3)在push時你沒有權利選擇你想要或者不想要push的檔案,也不能選擇只push部分commit而忽略一部分commit,你只能預設將所有commit都push。但如果只想push部分修改了的檔案(例如你與專案中其他人的gradle版本不同,你只修改了你的,但是你並不能把它提交,因此,你就不能push這個檔案),那麼你在commit的時候就只選擇你想push的檔案,不要選擇你不想push的檔案,不然你不想push的檔案被commit的了,該檔案最終也會被push,造成不必要的麻煩 4、程式碼回退
如何將程式碼回退到之前的版本。例如你這幾天在寫一個小功能,但是你的領導突然告訴你,你寫的這個功能我們打算去掉,雖然心裡一萬個mmp,但是你能做的就是刪掉你的程式碼,那你總不能一行一行找這幾天寫了哪些,然後刪吧,工作量巨大,還容易漏刪。這時,你就應該要會怎麼回退程式碼,如果你這幾天的程式碼只是commit了,並沒有push,那你只需要回退commit,然後再pull遠端程式碼就OK啦,集體是下面的1)方法;但如果你已經push出去了,那如何回退push呢?首先你可以選擇修改之後再push提交(這個太麻煩,強烈拒絕),其次你可以選擇revert push到某一版本,具體怎麼做呢?2)會教你具體的做法 1)回退沒有push的commit 如果你commit錯了,想回到之前的狀態,那麼你可以選擇右鍵-Git-Repository-Reset HEAD,然後會彈出下面的對話方塊,其中在to Commit中填入“HEAD~1"表示回退一次commit,把1變成2表示回退兩次commit,依次類推(注意回退commit並不會影響Android studio中程式碼的顯示,因為回退了commit只是修改了本地倉庫,對原生代碼並沒有影響,但是你回退了commit之後,在選擇push時就會發現你回退的commit不見了) 在這裡插入圖片描述
在這裡插入圖片描述 2)回退push 在Android studio下方的Version Control(如果沒有,可以選擇在在左邊專案欄任何位置右鍵-Git-show History)中選擇log,找到你想退掉的push,右鍵-Revert(有時候會需要讓你merge)即可退回本次提交的東西,但是注意了,僅僅是退回本次的修改,對於本次push之後的修改內容不受影響。例如我先push了一個註釋第一部分,再push了一個註釋第三部分,然後push一個註釋第二部分,我在註釋第一部分的地方右鍵-revert,然後push上去,結果遠端倉庫的變化是僅僅退回了這一次的修改,也就是變成第一部分不是註釋,但第二部分和第三部分全部都還是註釋。 (1)對第一部分註釋,並進行第一次commit and push 在這裡插入圖片描述 (2)對第三部分註釋,並進行第二次commit and push 在這裡插入圖片描述 (3)對第二部分註釋,並進行第三次commit and push 在這裡插入圖片描述 (4)然後我在第一次提交的地方進行revert回退 在這裡插入圖片描述 會彈出這樣的對話方塊,接著進行commit和push(這部分很簡單,沒什麼選的,就不放圖了) 在這裡插入圖片描述 然後原生代碼和遠端倉庫程式碼會變成這樣 在這裡插入圖片描述 在這裡插入圖片描述 以上結果說明什麼,說明了revert是提交新的修改,來僅僅回退你選擇revert的push的那次修改,對於其他的push的修改內容是沒有任何影響的 還得說明一下,前面的例子中三次push的內容沒有重疊的部分,也就是沒有哪一部分程式碼被重複修改,如果你revert的版本修改的內容在後續的push中有被再次修改,那麼你revert的時候系統會要讓你進行merge,中間的result就是你最終程式碼的樣子,完了之後再push一次,遠端程式碼也會變成你本地的樣子,也就完成了你想要的回退。 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 這時你在第一次提交的地方revert,那會彈出這樣的對話方塊 在這裡插入圖片描述 然後選擇merge,左邊local changes是原生代碼,右邊Changes from Server代表“合併進來”的分支上的修改,對兩邊的衝突選擇接受與否,結果在中間,確定之後,commit and push就可以實現本地和遠端倉庫程式碼回退到自己想要的樣子。 在這裡插入圖片描述 最近學習和工作所遇到的情況,暫時就總結到這裡,以後有其他情況再來補充。