是否可以在git中修改特定文件?

问题描述 投票:3回答:4

这类似于this question on merging,除了我试图将分支A重新分支到分支B上,而不是将分支B合并到分支A.

在单个文件中使用git checkoutgit commit的组合可以在分支A中实现类似的效果,但是这对于历史不像rebase那样具有相同的效果。

是否可以仅对特定文件进行rebase,以便将来所有rebase都不需要触摸这些文件,而无需重新定义所有文件的历史记录?

git rebase
4个回答
5
投票

有点。您可以进行交互式rebase,当在文本编辑器中显示rebase脚本时,将所有操作从“pick”更改为“edit”,然后保存并退出。重新定位现在将开始,并且在每次提交应用后它将停止,使您可以:

  1. 删除您不感兴趣的文件中的更改。 这是可行的 git reset <reference_commit> -- pathname 其中<reference_commit>是提交的名称,其中包含您不希望修改变形的文件。
  2. 通过运行git commit --amend -C HEAD应用这些更改。
  3. 运行git rebase --continue
  4. 冲洗,重复。

任何时候git rebase应用下一个提交重新生成的提交,您可能会遇到冲突,而不仅仅是编辑已记录的提交的机会。这与正常编辑没有太大区别 - 您只需要更加关注索引的当前状态。

在任何情况下,你想做什么,闻起来都很奇怪:通常,变基是“在更新的基础(上游代码)之上转发本地更改”,这意味着如果你的更改无法使用更新上游(以及为什么你还要保留一些文件不被更新?)在变基中没有任何意义 - 仅仅因为你不会变基础,你会做其他事情,这可能会在以后咬你。


1
投票

Git真的可以在整个存储库的基础上工作,而不是基于每个文件,所以你会发现在git中没有简单的方法可以做到这一点


0
投票

您可以使用“git checkout [文件路径]”将文件还原为上次提交的内容。例如

git checkout /views/index.html

0
投票

试试git revert。搜索引入了不需要的更改的特定提交哈希,并将其用作参数。然后git revert将生成一个补丁,撤消那些确切的变化。

注意,这意味着您的提交量很小(不会修改大量文件),因为它们应该是。因此,存储库中对其他文件的更新将不受影响,只有那些处理该特定提交的更改才会更改。

© www.soinside.com 2019 - 2024. All rights reserved.