GIT stash 命令的使用

发布时间:2026/10/27 1:29:05
GIT stash 命令的使用

一、问题描述

有三个分支,dev ,featureTom,featureLucy

dev为公共开发分支,12.20 Tom和Lucy同时拉取代码,进行开发,Lucy先一步提交代码到dev分支,Tom现在需要更新本地代码,并最终提交代码至dev分支

二、更新本地代码featureTom分支

1、暂存本地代码(只有暂存了之后才可以切换分支)

git stash

2、让本地知道远程仓库的状态

git fetch origin

3、切换至featureTom分支

git checkout featureTom

4、把最新 dev 合并进 featureTom

git merge origin/dev

5、恢复你之前的本地修改git stash pop

二、提交 featureTom 分支代码至远程

git add .

git commit

git push

三、更新本地dev分支

git checkout dev
git pull origin dev
有冲突则解决

四、merge featureTom into dev

git merge featureTom

五、其他场景

git stash 主要用于代码没有写完,临时合并其他人的代码

若代码已经写完,则可以直接提交到当前分支的远程分支,再切换到dev分支,更新dev分支到最新状态,merge into dev。会产生一个merge commit的提交记录。

git stash pop 三路合并 即产生冲突的原因

git stash pop 并非简单地“把文件复制回来”,而是执行一次 3-way merge ——

以 s^1 (index 快照)为 base,

s^2 (worktree 快照)为 ours,

当前 HEAD 所指的最新提交为 theirs(指的是本地分支的最新的提交,若pull了那么可能是其他人的修改的代码,可能会产生冲突,和远程分支无关),

三者共同计算差异并应用到当前工作区。

这意味着:如果当前分支在你 stash 之后,其他人推送了 login.js 的新版本,那么 pop 时 Git 会尝试将你 stash 里的 login.js(来自 s^1 )与远程新版本(theirs)做合并,而不是无脑覆盖。

这解释了为什么有时 pop 会触发冲突——不是 stash 出错了,而是你 stash 时的代码基线,已经和当前分支的实际状态产生了不可忽略的偏移。