星期五, 5月 19, 2017

[git] git stash 衝突

有個小需求插單,直接下 git stash -u 暫存後,就在該 branch 上趕快完成插單需求,完成後下 git stash pop 把暫存叫回來,然後該 Project 就無法載入,Orz

[VSTS] git stash 衝突-20



用個 Project 來還原發生情況,開個 WinForm Project 並新增 Form2,Form2 為正在撰寫的需求

VS 檔案總管檔案狀態

[VSTS] git stash 衝突-2

利用 git 來看檔案狀態

[VSTS] git stash 衝突-1

接到插單需求,要把原本需求的 Form2 暫存起來,下 git stash -u 把 untrack 檔案也一併暫存起來

[VSTS] git stash 衝突-3

新增 Form3 模擬差單需求已完成,並進行 commit 啦

[VSTS] git stash 衝突-4

使用 git stash pop 回復暫存,在 project 上發生衝突啦

[VSTS] git stash 衝突-5

回到 VS 內就跳出這個 Error

[VSTS] git stash 衝突-6

VS 方案總管內可以看見 StashMerge 載入失敗,原來卸載情況下,可以編輯 Project 檔案

[VSTS] git stash 衝突-7

打開 Project 後,就可以發現發生衝突的地方,理解是新增 Form2 和 Form3 在 Project 內都是在同一個位置,所以 Form3 完成後,把暫存的 Form2 抓回來,就衝突啦

[VSTS] git stash 衝突-8

修正衝突,Form2 和 Form3 都要存在 project 內

[VSTS] git stash 衝突-9

重新載入 Project
[VSTS] git stash 衝突-10

project 內有衝突解決,所以在 VS 方案總管內,會有個小綠色分支圖示顯示

[VSTS] git stash 衝突-11

解決衝突後,當然是要進行 Commit 囉,把衝突解決 commit 起來,網路教學都這樣教的

[VSTS] git stash 衝突-12

把衝突解決 commit 後,就發現 Form2 還是在 untrack 狀態,但是 project 內的 Form2 設定,已經被 commit 了

VS 方案總管內 project 已經是鎖頭圖示,Form2 還是加號圖示

[VSTS] git stash 衝突-14

git status 內沒有 project 有修改紀錄

[VSTS] git stash 衝突-13

進行到這邊,Form2 暫存回來後,已經亂掉啦,這時候再下 git stash 暫存的話,會變成 Form2 暫存,Project 內的設定偵測不到 Form2,也是 GG

查了一下網路資料,有個解法是把 MergeConflict commit 刪除,就會恢復正常

下 git reset 或 在 VS 內操作

[VSTS] git stash 衝突-15

reset 後,在VS 方案總管內,就可以看見 Form2 的狀態恢復正常

[VSTS] git stash 衝突-19

從 [Team Explorer - 變更] 來觀察

[VSTS] git stash 衝突-17

利用 git 語法來觀察

[VSTS] git stash 衝突-18

git diff 來觀察 project 檔案

[VSTS] git stash 衝突-16

解決 merge conflict 後再刪除 merge conflict commit 雖然可以回復到正常狀態,感覺就很奇怪 >.<,還是養成開 branch 撰寫需求,遇到插單時暫存 stash 後,再切到其他 branch 去撰寫的習慣,通通在同一個 branch 上撰寫,似乎不是一個好習慣

沒有留言:

張貼留言