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

时间:2014-09-17 02:26:12

标签: git rebase

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

在单个文件中使用git checkoutgit commit的组合可以在分支A中实现类似的效果,但这对于历史记录与rebase没有相同的效果。

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

4 个答案:

答案 0 :(得分:5)

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

  1. 删除您不感兴趣的文件中的更改。

    这可以通过

    之类的东西来实现
    git reset <reference_commit> -- pathname
    

    其中<reference_commit>是提交的名称,其中包含您不希望修改基础的文件。

  2. 运行git commit --amend -C HEAD

  3. 以应用这些更改
  4. 运行git rebase --continue
  5. 冲洗,重复。
  6. 任何时候git rebase应用下一个正在重新生成的提交,您可能会遇到冲突,而不仅仅是编辑已记录的提交的机会。这与正常编辑没有太大差别 - 您只需要更加关注索引的当前状态。

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

答案 1 :(得分:1)

Git确实可以在整个存储库中工作,而不是在每个文件中工作,因此您不会在git中找到简单的方法

答案 2 :(得分:0)

您可以使用“ git checkout [文件路径]”将文件恢复为最后提交的文件。例如

git checkout /views/index.html

答案 3 :(得分:0)

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

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