我经常发现自己处于克隆存储库,创建本地分支然后必须进行一些初始设置工作(这会更改某些文件)的情况,然后才能继续执行我想要稍后推送的实际更改。
例如:我克隆了一个Visual C ++项目并创建了本地分支。现在我必须更改include和lib目录以正确引用libboost。这会更改.vcxproj
文件,但这显然是我不想发送回origin/master
的更改。只有后续更改才是真正的变化。
我考虑使用git update-index --assume-unchanged <file>
,但这会忽略整个文件,因此它排除了我想要提交的文件的其他更改的可能性。
有什么解决方案? git rebase
可能是解决方案吗?
答案 0 :(得分:2)
是的,很可能git rebase
就是你想要的。
有很多方法可以做到这一点。一种方法是从您不想发送的更改开始,然后在完成后使用git rebase --interactive
,这样您就可以重新排序提交并将这些不相关的更改放在最后。
类似的东西:
我手动添加分支名称(主,修复和项目),但您可以在没有分支的情况下执行此操作。例如,如果您想推送&#39;项目的所有提交。分支作为修复&#39;分支,除了最后一个分支,即使你没有本地分支,你可以这样做:
git push origin project^:fixes
另一个选择是建立一个永久性项目&#39;对本地更改为&#39; .vcproj.default&#39;的分支,然后让您的其他分支基于它:
完成“修复”后#p>分支,您可以在推送之前重新分支您的分支:
git rebase --onto master project fixes
这基本上会选择来自&#39;项目&#39;的提交。修复&#39; (&#34;修复1&#34;和&#34;修复2&#34;),并将它们重新放在master之上,基本上删除了&#34;项目更改&#34;从分支机构提交。
答案 1 :(得分:1)
我不确定我是否正确地提出了您的问题,但我认为将包含本地设置的配置文件直接放入存储库并不是一个好主意。相反,我会添加一个文件,让我们说.vcproj.default
到存储库,其中包含所有设置的默认定义。克隆存储库后,您只需
cp .vcproj.default .vcproj
然后更改您需要的设置。文件.vcproj
本身我将使用.gitignore
文件排除。
答案 2 :(得分:1)
过滤器可以使过程无痛。 Here's the basic idea,您可以保存上游的当前值并在结帐时将其替换为您的值,并保存当前值并在检查时将其替换为上游值。您能否提供一些想要避免泄漏的变更样本?