Git操作:如何回退A文件夹至旧commit且保留B文件夹新提交
解决方案:单独回退指定文件夹至旧版本并保留其他文件夹改动
这问题我之前处理过,直接用git reset回退整个分支肯定不行——那样会把文件夹B的新提交也一并抹掉。咱们需要针对文件夹A单独操作,具体步骤如下:
第一步:确保当前工作区干净
先切换到合并后的目标分支,然后执行:git status如果有未提交的改动,先通过
git stash暂存或者git commit提交,避免后续操作冲突。第二步:从指定旧commit中拉取文件夹A的内容
用git checkout命令,指定你要回退到的commit(也就是cA2),并仅针对文件夹A操作:git checkout cA2 -- 文件夹A的完整路径比如如果文件夹A在项目根目录下,路径就写
./A或者直接A;如果有嵌套路径,比如src/A,就写完整路径。第三步:提交回退改动
这时候你的工作区里,文件夹A已经回到了cA2的状态,而文件夹B的所有新改动都完好保留。接下来把这个回退操作提交成一个新的commit:git add 文件夹A的完整路径 git commit -m "回退文件夹A至commit cA2"
额外注意事项
- 确保文件夹A和B是完全独立的(没有交叉文件),否则可能会出现意料之外的冲突;
- 如果cA2之后,文件夹A有和其他分支的合并改动,这个操作只会覆盖A的当前内容到cA2状态,不会影响其他分支的历史;
- 如果你需要永久移除cA2之后A的所有commit历史(而不是新增一个回退commit),可以用
git rm -r 文件夹A的路径,再checkout cA2的A,然后提交,但这种方式会修改历史,团队协作时要谨慎。
内容的提问来源于stack exchange,提问作者user3550446
相关产品推荐
相关产品推荐

