Git如何提交更改到其他分支且保留当前分支未提交状态
标准操作流程(推荐)
不要直接携带未提交的改动跨分支切换,用git stash做中转就能实现需求,步骤如下:
- 停留在master分支时,先把当前所有未提交的改动(含工作区、暂存区、未跟踪的新增文件)存入Git的临时暂存栈,执行命令:
git stash push -u -m "temp_changes"。执行完成后运行git status,会看到master工作区完全干净,所有改动已被临时收纳。 - 切换到目标feature分支:
git checkout feature - 将刚才临时存储的改动恢复到feature分支的工作区,注意用
apply而非pop(避免删除暂存栈里的备份,后续master还要用到):git stash apply stash@{0}。恢复完成后你就能在feature分支看到所有原master上的未提交改动,正常执行git add、git commit把这些改动提交到feature分支即可。 - feature分支提交完成后,切回master分支:
git checkout master - 再次把暂存栈里备份的同一份改动恢复到master分支工作区:
git stash apply stash@{0}。此时运行git status就能看到所有改动回到了最初的未提交状态,和你切换到feature分支之前完全一致。确认状态无误后,执行git stash drop stash@{0}删除这条临时暂存记录即可,避免暂存栈堆积无用条目。
已经误操作后的补救方案
如果你已经没做暂存,直接带着master的未提交改动切到feature分支、并且把这些改动提交到了feature分支,按以下步骤操作也能还原master上的未提交状态:
- 先切回master分支:
git checkout master - 找到你刚才在feature分支上提交这批改动的commit哈希值,执行带不提交参数的拣选命令,把该提交的所有改动直接应用到当前master的工作区,不生成新提交:
git cherry-pick -n <对应提交的完整hash/短hash> - 命令执行完成后,该提交里的所有改动就会回到master的工作区/暂存区,和你最开始未提交的状态完全一致。如果部分文件被自动放到了暂存区,你可以根据需要执行
git restore --staged <文件名>把文件退回工作区,匹配你最初的状态即可。
注意:Git默认会在分支切换时自动携带不冲突的未提交改动,但这种行为不确定性很高,很容易出现冲突、误提交到错误分支的问题,跨分支临时转移改动优先用stash做中转稳定性最高。
内容的提问来源于stack exchange,提问作者draca
相关产品推荐
相关产品推荐

