Git:使用交互式变基编辑特定旧提交并撤销部分文件已提交变更
搞定交互式Rebase中撤销部分文件变更的问题
嘿,我懂你现在的困惑:进入rebase的编辑模式后,目标提交的变更已经在文件里了,但git status却显示没内容可提交,没法用git restore来撤销部分文件的修改。其实这是因为这个旧提交已经被临时应用成当前的HEAD了,咱们按下面的步骤操作就能解决:
第一步:把旧提交的变更“拆出来”
执行这个命令:git reset HEAD^
这个操作会撤销当前的临时提交(就是你要编辑的那个旧提交),原来提交里的所有变更都会回到工作区。这时候再跑git status,就能看到那些变更啦。第二步:选择性撤销你不需要的文件变更
现在你可以自由处理每个文件了:- 如果想直接丢弃某个文件的所有变更,回到该提交之前的状态:
git restore <文件名> - 要是你只是想把文件从暂存区移回工作区(不过reset后默认变更都在工作区,这个可能用不上,但还是提一下):
git restore --staged <文件名>
针对每个你不想保留变更的文件执行对应的命令就行。
- 如果想直接丢弃某个文件的所有变更,回到该提交之前的状态:
第三步:重新提交修改后的内容
执行:git commit -c ORIG_HEAD
这个命令会自动带上原来提交的作者信息、提交说明,同时打开编辑器让你可以修改说明(如果需要的话),不用重新写一遍,很方便。第四步:完成Rebase流程
最后执行:git rebase --continue
Git会自动把后续的提交重新应用到修改后的提交上面,整个流程就完成了。
要是中途操作错了,别担心,随时用git rebase --abort就能终止当前操作,回到你开始rebase之前的状态。
内容的提问来源于stack exchange,提问作者sir-haver
相关产品推荐
相关产品推荐

