用個 Project 來還原發生情況,開個 WinForm Project 並新增 Form2,Form2 為正在撰寫的需求
VS 檔案總管檔案狀態
利用 git 來看檔案狀態
接到插單需求,要把原本需求的 Form2 暫存起來,下 git stash -u 把 untrack 檔案也一併暫存起來
新增 Form3 模擬差單需求已完成,並進行 commit 啦
使用 git stash pop 回復暫存,在 project 上發生衝突啦
回到 VS 內就跳出這個 Error
VS 方案總管內可以看見 StashMerge 載入失敗,原來卸載情況下,可以編輯 Project 檔案
打開 Project 後,就可以發現發生衝突的地方,理解是新增 Form2 和 Form3 在 Project 內都是在同一個位置,所以 Form3 完成後,把暫存的 Form2 抓回來,就衝突啦
修正衝突,Form2 和 Form3 都要存在 project 內
重新載入 Project
project 內有衝突解決,所以在 VS 方案總管內,會有個小綠色分支圖示顯示
解決衝突後,當然是要進行 Commit 囉,把衝突解決 commit 起來,網路教學都這樣教的
把衝突解決 commit 後,就發現 Form2 還是在 untrack 狀態,但是 project 內的 Form2 設定,已經被 commit 了
VS 方案總管內 project 已經是鎖頭圖示,Form2 還是加號圖示
git status 內沒有 project 有修改紀錄
進行到這邊,Form2 暫存回來後,已經亂掉啦,這時候再下 git stash 暫存的話,會變成 Form2 暫存,Project 內的設定偵測不到 Form2,也是 GG
查了一下網路資料,有個解法是把 MergeConflict commit 刪除,就會恢復正常
下 git reset 或 在 VS 內操作
reset 後,在VS 方案總管內,就可以看見 Form2 的狀態恢復正常
從 [Team Explorer - 變更] 來觀察
利用 git 語法來觀察
git diff 來觀察 project 檔案
解決 merge conflict 後再刪除 merge conflict commit 雖然可以回復到正常狀態,感覺就很奇怪 >.<,還是養成開 branch 撰寫需求,遇到插單時暫存 stash 後,再切到其他 branch 去撰寫的習慣,通通在同一個 branch 上撰寫,似乎不是一個好習慣
- 延伸閱讀
- [VSTS] Stash 暫存
沒有留言:
張貼留言