这类似于关于合并的问题,但我尝试将分支A变基到分支B,而不是将分支B合并到分支A。
可以使用git checkout
和git commit
命令在单个文件上进行组合,从而在分支A中实现类似效果,但这对历史记录没有与变基相同的影响。
是否有可能只变基特定的文件,以便所有未来的变基都不需要涉及这些文件,而无需变基所有文件的历史记录?
有点像。您可以执行交互式变基,并在文本编辑器中显示变基脚本时,将所有操作从“挑选”更改为“编辑”,然后保存并退出。现在会开始重新定位,并且在应用每个提交后停止,这样您就可以:
删除您不感兴趣的文件中的更改。
可以通过类似于以下内容的方式完成
git reset <reference_commit> -- pathname
其中<reference_commit>
是包含你不想被合并的文件的提交名称。
运行git commit --amend -C HEAD
来应用这些更改。
git rebase --continue
。每当git rebase
应用下一个要合并的提交时,你可能会遇到冲突,而不仅仅是编辑已记录的提交。这与普通的编辑并没有太大区别——你只需要更加关注索引的当前状态。
总之,你想要做的事情,在我看来听起来相当奇怪:重新基于更新的上游代码向前移植本地更改,这意味着如果你的更改无法与更新的上游代码一起工作(否则你为什么还想保留某些文件不更新?),那么重新基于就没有意义——因为你不会重新基于,而是在做其他事情,这可能会在后面给你带来麻烦。
git checkout [文件路径]
将文件恢复到最后一次提交的状态。例如:git checkout /views/index.html
Git 真正的工作方式是基于整个仓库而不是单个文件,因此你会发现在 Git 中没有简单的方法来做到这一点。
git revert
。搜索引入不需要的更改的特定提交哈希,并将其用作参数。git revert
然后会生成一个撤消这些确切更改的补丁。我相信你要找的是 git checkout --patch BRANCH_NAME FILE_PATH
请注意,如果省略了 --patch
,文件将被简单地覆盖。