[git]pull的時候,會自動產生一個merge的commit記錄的處理方式(善用stash)

[git]pull的時候,會自動產生一個merge的commit記錄的處理方式(善用stash)

最近筆者和同事都會在pull的時候,發現一些跟svn不太一樣的情況,也就是有時候會自動commit一版別人修改的記錄,但是這些檔案的修改並不關自己的事情,為何要再出現這筆commit記錄呢?而因為筆者和大多數公司同事使用的git gui為source tree,所以這邊有一些設定會導致每個人遇到這個情況的遭遇不太一樣,就待筆者來還原一下在source tree的時候會遇到的兩種情況。

先來看一下目前筆者版控上的歷史狀態

遠端改了Hello.vue,而筆者自己改了Child.vue

這種情況之下通常我們pull是會失敗的,所以可能會先commit一版本地端的記錄,當我們commit一版記錄之後,就會出現兩種情況,一種就是除了我們本地的記錄,pull之後會再產生一版記錄如下,請注意這個commit的檔案是跟test/master一樣的

另一種狀況則是把pull下來的所有檔案變成change檔案,需要我自行commit一版並不是我修改的檔案

因為如果不是那麼了解的話,就會遇到其實一樣的問題,但是大家遇到的情況又不是那麼相同,這是因為pull的時候幾種選擇所造成不同的結果

說明已經很清楚了,但特別注意一下第四個選項rebase,他會直接參考pull下來的檔案,連你們一起修改的檔案全部變成遠端版控的,也不會再產生任何記錄,所以這個選項千萬不要選擇,除非你明確知道要放棄自己所有改的檔案。

如何不要在pull的時候會包含別人修改的檔案,我只想管好自己改掉的東西就好了啊,接著來說明一下如果我們只想要管自己改的檔案,不想產生多餘的記錄怎麼處理呢?首先我們可以先把目前修改的檔案Stash起來,等pull下來之後,我們再把這個Stash給apply

接著我們就pull遠端的異動,再看一下筆者目前的history記錄

接著把我們還未修改完成的stash給apply

當然以git的精神來說,最好的方式就是永遠都開一個新分支出來修改,但如果真的不小心遇到這種狀況,還是可以使用這種方式來解決,以避免多一個不是很必要的merge記錄