使用git stash apply出现合并冲突,如何通过stash强制覆盖文件?
你尝试的命令效果说明
你使用的git stash apply -Xours不能达到「用stash内容覆盖现有文件」的预期,反而会得到相反的效果:-Xours是合并策略参数,这里的ours指代你当前工作区基于的HEAD版本(也就是你本地现在的文件内容),冲突时会优先保留本地内容,忽略stash里的修改。
用stash强制覆盖现有文件的操作方法
根据你的需求可以选择不同的方案:
方案1:仅冲突部分用stash内容覆盖,其余未冲突修改保留
如果不需要清空当前所有未提交修改,只希望冲突位置优先采用stash里的内容,使用如下命令即可:
git stash apply -Xtheirs
这里的theirs指代stash存储的版本内容,冲突时会自动采用stash的修改,完全符合你的需求。如果你apply后不需要保留stash栈里的这条记录,把apply换成pop即可。
如果已经执行了普通的git stash apply出现了冲突,可以直接针对冲突文件执行覆盖:
- 单文件覆盖:
git checkout --theirs 目标文件名 - 所有冲突文件批量覆盖:
git checkout --theirs .
执行后执行git add标记冲突已解决即可。
方案2:完全清空当前未提交修改,全量用stash内容覆盖
如果你不需要保留当前工作区的任何未提交修改,希望工作区完全恢复到stash存储的状态,可以先执行重置清空本地修改,再应用stash:
git reset --hard git stash apply
注意:该操作会删除当前工作区所有未提交的修改,操作前请确认没有需要保留的内容,拿不准可以先把当前修改也执行
git stash临时存储,避免内容丢失。
内容的提问来源于stack exchange,提问作者Patifon_Kakao
相关产品推荐
相关产品推荐

