Git将本地未暂存修改拆分为两个独立提交的操作方法
核心结论
不需要拆分本地版本,也不需要新建多个仓库,Git原生暂存区能力完全支持把未暂存的修改拆成多个独立提交,同一文件内的不同修改也可以分别归属不同提交。git stash可以有效降低新手拆分操作的出错概率,非常适合当前场景。
新手友好操作步骤(git stash辅助,EGit+命令结合)
全程不需要删除现有修改,所有操作都不会丢失代码,按顺序走即可:
- 第一步:确认初始状态
打开Eclipse内置Terminal,切到项目根目录,执行git status,确认所有修改的文件都处于「Changes not staged for commit」的未暂存状态,和你当前的情况匹配即可继续。 - 第二步:临时封存所有修改
执行git stash push -m "待拆分的全量修改",命令执行完再跑一次git status,如果显示工作区干净(nothing to commit, working tree clean),说明所有修改都已经被临时存到Git的stash栈中,没有丢失。 - 第三步:挑选第一部分修改做首次提交
执行git stash pop,之前封存的所有修改会重新回到工作区,接下来开始挑第一份提交要包含的内容:- 如果某个文件的全部修改都属于第一个提交:直接在EGit的「Git Staging」面板把对应文件拖到「Staged Changes」区域,或者终端执行
git add 对应文件路径即可 - 如果同一个文件只有部分修改属于第一个提交:两种操作方式二选一:
- 命令行方式:执行
git add -p 对应文件路径,Git会自动把文件内的修改拆成独立代码块,终端逐个提示是否暂存当前块,输入y确认暂存(归第一个提交)、输入n跳过(留在工作区归第二个提交),输入?可以查看全部操作说明 - EGit可视化方式:双击修改的文件打开对比视图,选中要归到第一个提交的代码行/代码块,右键选择「Add to Git Index」,选中的内容就会进入暂存区,未选中的修改会留在工作区
所有第一份提交的内容挑完后,在EGit的Staged Changes区域核对内容,确认没有杂项后,填写提交信息完成第一次提交即可。
- 命令行方式:执行
- 如果某个文件的全部修改都属于第一个提交:直接在EGit的「Git Staging」面板把对应文件拖到「Staged Changes」区域,或者终端执行
- 第四步:完成第二次提交
第一次提交完成后,工作区剩下的所有未暂存修改,全都是要归到第二个提交的内容,直接在EGit里点「Select All」把所有未暂存文件加到Staged区域,或者终端执行git add .,核对内容后填写第二个提交的信息提交即可。
git stash的作用说明
- stash是Git自带的临时存储栈,核心作用是把当前工作区未提交的修改(不管有没有进暂存区)临时封存起来,需要的时候再恢复,不会和现有提交冲突
- 除了上面的新手稳妥用法,你也可以灵活调整流程:比如先挑第一部分修改暂存提交后,把剩下的修改用
git stash封存,先跑测试验证第一个提交没问题,再执行git stash pop把剩下的修改恢复出来做第二个提交 - 存到stash里的内容只要不手动执行
git stash drop(删除指定stash记录)或者git stash clear(清空所有stash记录)就不会丢失,新手操作不用怕代码丢失。
操作提示:如果暂存的时候不小心加错了内容,不需要慌,执行
git restore --staged 误加的文件路径,或者在EGit的Staged Changes区域把误加的文件/代码块拖回Unstaged区域,就能把内容从暂存区退回工作区,修改不会丢失。
内容的提问来源于stack exchange,提问作者user2526586
相关产品推荐
相关产品推荐

