所以我在Git工作,並試圖創建一個新的分支,我可以放棄我的藏匿的內容,並支持我的存儲在這樣做時發生的任何合併衝突。我正在做以下事情:想申請我的藏匿處到一個新的分支,並覆蓋它與我的藏東西的一切
git checkout -b *newbranchname*
git stash apply
它告訴我文件合併衝突。我怎樣才能在終端上做這件事,並且自動地在任何衝突中支持隱藏,而不必專門處理它們?
所以我在Git工作,並試圖創建一個新的分支,我可以放棄我的藏匿的內容,並支持我的存儲在這樣做時發生的任何合併衝突。我正在做以下事情:想申請我的藏匿處到一個新的分支,並覆蓋它與我的藏東西的一切
git checkout -b *newbranchname*
git stash apply
它告訴我文件合併衝突。我怎樣才能在終端上做這件事,並且自動地在任何衝突中支持隱藏,而不必專門處理它們?
在我看來,最簡單的方法是「不這樣做」 :-)
相反,把你的git stash
內容變成自己的一個分支:
git stash branch newbr
現在你有一個新分支newbr
,索引準備提交(如果您有索引項目git add
),並根據存儲修改工作樹,準備好編寫並提交。如果您之前仔細添加了內容,請立即提交,然後添加其他內容並再次提交。如果沒有,只需現在添加一切並提交。現在你有一個新的分支newbr
,其中有一兩個提交 - 有多少取決於你剛剛做了多少個git commit
-當你做了git stash
時,它加入了任何提交。
現在,您可以從不同的起點創建不同的新分支(如果這是您想要的),並使用git cherry-pick
來提交這些提交,然後放棄新分支。或者,您可以使用git rebase -i
(使用<upstream>
以及可選的--onto
參數)以通常的rebase方式複製其他地方的提交,一旦完成複製就丟棄原始提交。或者,如果newbr
的現有起點畢竟是你想要的,那麼你已經全部設置好了。
所有這一切說,如果你真的做只想檢查工作樹的版本有衝突的文件,完全無視這些文件的最新版本,你可以做到這一點很容易。需要記住的是,(對某些號碼ñ或[email protected]{N}
)引用名稱stash
指w
掃樹犯該git stash
做時,它保存了stash bag的i
和w
提交。因此:
git checkout stash -- path/to/file
提取w
版本的path/to/file
,通過索引寫它(因此解決任何衝突合併),完全無視HEAD
版本的文件。
(文件的i
ndex提交的版本是stash^2
,如果有未追蹤/全部文件提交,這些文件是在stash^3
,正如我在that other answer指出,雖然w
在技術上是一個合併提交,這是不是一個正常的合併,並且全文件提交尤其是非常不尋常的,因爲它只有這些文件,並且沒有索引/工作樹文件。)
你可以嘗試
git merge-recursive --theirs stash^ -- @ stash
看到,如果你喜歡的結果。