一陣子沒去用Source Tree在Windows上更新本機檔案都遠端master,總是會遇到一些無法順利push檔案到遠端的問題,昨天就因為要update 我的robot test case所以又遇到卡關,但還好這次解決速度很快,沒有卡住太久。
首先是當我打開Source Tree切到要執行版本控制的專案時,發現遠端repository 有檔案需要pull ,於是我打開command 介面下git pull 要把檔案拉回來,卻出現錯誤訊息:大概就是說我本機的檔案修改的分支必需先merge回master,但因為master線上有一些修改並未反映在我的分支上,所以當我下pull時,該些要pull的檔案與我分支上的檔案衝突,因而我無法pull檔案再commit我修改過的內容然後push回master上,我忘記詳細錯誤訊息是什麼了,但可以確定的是我打算要pull時的線與遠端master線呈現如下不同端的狀態:
通常這種時候我就要頭痛了!因為有很多種reset git head的方式,但我卻對何時改用哪一種一無所知,空有指令集也無用武之地。
說時遲那時快,剛好看到錯誤說明中有說我可以試著把本機所有修改的檔案先stash,也就是先放到一個暫存區,這時所有修改過的地方就會暫時失效,然後就可以pull檔案到現在的分支了,而此刻要pull的檔案有a.py跟b.py檔,為怕pull過來之後會把我原先的a.py與b.py內容蓋掉,所以我在下stash之前便先把這兩個在我支線上的檔案另存一份copy,然後在下以下兩個指令:
其實在git stash + git pull之後,我的支線可以說就是把原本遠端的master線上pull的那個點給複製過來而已,此時我的支線的點的內容與遠端支線的那個被pull的點的內容應該是一模一樣才對。
現在,在本機上我可以看到的是Y點的現狀,但此時我本來的修改都不見了,因為還放在stash area,這時候只要用git stash pop 便可以把所有檔案都update到Y點了,但因為Y與stash area中的a.py及b.py內容不同,所以會有merge的警告訊息出現,我們不理他,繼續下一步,此時會產生新的點Z,該點會包含原本我本機所有change,同時a.py與b.py將會寫入符號表示哪些地方是X與Y因為不一致導致合併成Z後要檢查的內容
現在只要把a.py跟b.py用本來在下git stash之前的本機拷貝檔覆蓋過去,那麼Z點就完全與當初要push的那個點的內容一模一樣了,只要再git commit 然後git push到遠端master,那所有更新的成功了。
2017年8月24日星期四10:57 PM
留言列表