我唯一关心的是C ++文件。 (不要担心二进制文件,文本等...你可以假设一切都是C ++代码_)。
我有这些分支:
* dev
master
现在,我可以创建一个新的分支“魔术”,其中分支魔法等同于“dev”(就生成的C ++代码而言),但最小化无用的whiteline差异(如插入额外的换行符)。 p>
这可能吗?
谢谢!
答案 0 :(得分:1)
我的问题并不完全清楚。我想你希望新分支包含一系列提交,这些提交与 dev 中的提交“等效”,但不包含不必要的空格更改。
最简单的方法是使用git rebase --interactive
。这允许您手动编辑一系列提交。您可以使用git rev-list HEAD | tail -n 1
获取第一个(“root”)提交的哈希值。如果你想编辑第一个提交,那就更难了,但是有一个SO答案。
git checkout dev
git checkout -b magic
git rebase --interactive $(git rev-list HEAD | tail -n 1)
这将按照正向时间顺序在提交列表中显示一个编辑器。您在要更改的提交上将选择更改为编辑。然后git会在处理每个提交之前暂停,允许您使用git commit --amend
修改它,然后使用git rebase --continue
继续使用rebase。您当然可以运行脚本来清理文件,而不是手动编辑它们。如果您希望根据与之前提交的差异执行此操作,则需要使用git cat-file blob HEAD^:filename
之类的内容来获取以前的修订版,或使用git diff HEAD^ filename
。
如果您想自动完成整个过程,则可以使用git filter-branch --tree-filter script
。有关详细信息,请查看 git-filter-branch 的手册页。
如果您想阻止将来的提交包含空格错误,可以设置预提交 hook以禁止它们。
一旦您对新分支 magic 感到满意,您可以使用它来替换 dev :
git branch -m dev dev-old
git branch -m magic dev
但是,请注意,这可能会导致已经拥有自己的回购中 dev 副本的人员出现问题。那么做一个合并会更好。
答案 1 :(得分:0)
git diff --ignore-space-change ...
答案 2 :(得分:0)
你可以尝试设置一个post-merge
hook,它将:
post-merge
挂钩不能直接影响git merge
的结果)