5

我有一个主题分支(关闭master)有很多变化。在此主题分支的整个历史中,某个文件发生了许多更改。如何在我的主题分支的整个历史记录中删除对此文件的所有更改?

补充说明:

  • 请注意,该文件在创建主题分支之前就已存在。我不想删除文件本身。
  • 我有几个解决方案,但到目前为止,它们似乎很乏味。我会将它们作为单独的答案发布。
  • 可以git filter-branch以某种方式用于此吗?
  • 我的主题分支包含大约...说...60 次提交。
4

3 回答 3

5

使用git filter-branch

$ git checkout topic-branch
$ git filter-branch --index-filter 'git checkout master -- myfile' master..HEAD
于 2013-09-25T09:25:04.610 回答
0

根据分支的开始重新设置树的基础。使用属性来确定该特定文件的不同合并策略,特别是“merge.ours”(始终保留我们的文件)。该线程解释了如何:告诉 git 对特定文件使用我们的合并策略(问题本身告诉你如何去做,答案只是提问者的一个陷阱)。

我不知道这有多“乏味”,例如您是否必须在每次提交时确认某些内容,因为我还没有这样做。但我认为不会。

于 2013-09-25T09:09:19.537 回答
0

做一个交互式变基。繁琐的版本将是简单地编辑/修改每个提交以删除更改:

git checkout topic-branch
git rebase -i master    
# set all commits to edit

# for every commit; do
git show --stat
# if myfile is not changes: git rebase --continue

# copy the commit message
git reset HEAD^
git reset myfile
git checkout myfile
git commit
# paste in commit message

git rebase --continue
# ...until we are done

稍微改进的版本是使用git log master.. myfile并且只编辑列出的提交。

于 2013-09-25T09:11:33.830 回答