如何将工作区文件与stash文件合并?
如何将工作区文件与stash文件合并?
看起来你现在的情况是:在提交5014fdd之后存了一个stash(就是哈希为a8f1171的那个),之后又在工作区的同一个文件做了临时测试修改,想要把这两处的改动合并到一起对吧?先给你还原下你的Git提交结构,方便对齐场景:
* a8f1171 - (refs/stash) On branch: my stash file |\ | * 765e476 - index on branch: previous branch commit |/ * 5014fdd - (HEAD -> branch) previous branch commit
下面给你几个实用的方案,你可以根据自己的需求选:
直接合并法(简单直接,适合能快速解决冲突的场景)
直接运行git stash apply a8f1171——这里用哈希值指定stash比用stash@{0}更可靠,毕竟新存stash会打乱序号。Git会自动尝试把stash里的改动合并到当前工作区,如果同一个文件出现冲突,Git会在文件里用<<<<<<<、=======、>>>>>>>标记出冲突块,你只需要手动编辑文件,保留需要的代码、删除冲突标记,之后用git add <冲突文件名>标记冲突已解决即可。
如果之后不需要保留原来的stash,可以换成git stash pop a8f1171,它会在应用stash后自动删除该记录。临时分支合并法(更安全,适合怕搞乱当前工作区的情况)
- 先把当前工作区的临时改动存成新stash,避免丢失:
git stash push -m "temp_workspace_changes" - 基于当前
branch分支创建临时分支:git checkout -b temp_merge_branch - 应用原来的目标stash:
git stash apply a8f1171 - 再应用刚才存的工作区改动stash:
git stash apply stash@{0} - 处理可能出现的冲突,解决后用
git add标记,之后你可以把临时分支的改动合并回原branch分支,或者直接在这个临时分支上继续工作,完成后删除临时分支就行。
- 先把当前工作区的临时改动存成新stash,避免丢失:
stash分支合并法(适合想保留合并过程记录的场景)
- 先暂存当前工作区的改动:
git stash push -m "workspace_temp" - 从目标stash创建新分支,Git会自动把stash的改动应用到这个分支上:
git stash branch merge_stash_branch a8f1171 - 回到原分支,应用刚才存的工作区改动stash:
git checkout branch,然后git stash apply stash@{0} - 或者你也可以直接在
merge_stash_branch分支上应用工作区改动stash,处理冲突后将这个分支合并回原分支,这样整个合并过程会有清晰的提交记录可追溯。
- 先暂存当前工作区的改动:
备注:内容来源于stack exchange,提问作者laudai
相关产品推荐
相关产品推荐

