如何将单个文件从一个Git提交移至另一个提交?求更优方法
更高效的操作方式
针对把fileA从commit_A移到commit_B的需求,你可以简化流程,在一次交互式rebase里完成所有修改,不用拆分提交后再做fixup:
假设提交顺序是 ... → commit_A → commit_B → 当前分支,操作步骤如下:
启动交互式rebase,范围覆盖commit_A到commit_B:
git rebase -i HEAD~2 # 如果commit_A不是倒数第二个提交,把HEAD~2换成commit_A的父提交哈希在弹出的编辑器里,把commit_A对应的行从
pick改成edit,commit_B保持pick,保存退出。此时Git会停在commit_A的修改阶段,执行以下命令把fileA从commit_A里移除:
git reset HEAD^ fileA git commit --amend --no-edit这一步会更新commit_A,让它只包含fileB。
继续rebase流程:
git rebase --continueGit会推进到commit_B的阶段。
把fileA添加到commit_B里:
git add fileA git commit --amend --no-edit现在commit_B就包含了fileC、fileD和fileA。
最后完成rebase:
git rebase --continue
这种方法比你原来的步骤少一次额外的fixup操作,全程在一个rebase会话里完成,更简洁高效。
如果你对Git命令比较熟悉,还可以用更快捷的提取修改方式:
先提取commit_A中fileA的修改到暂存区:
git show commit_A:fileA > fileA git add fileA启动交互式rebase修改commit_A:
git rebase -i commit_A^标记commit_A为
edit,保存退出后,移除fileA并更新commit_A:git rm --cached fileA git commit --amend --no-edit git rebase --continue把暂存的fileA合并到commit_B:
git commit --amend --no-edit commit_B注意:这一步需要确保当前HEAD处于commit_B之后的位置,否则建议还是用第一种方法,避免出错。
内容的提问来源于stack exchange,提问作者Lovis XII
相关产品推荐
相关产品推荐

