有没有办法在本地提交但远程忽略?
没有。
更准确地说,不是你想的那样。当您意识到在某种程度上,Git 根本不关心 文件 时,您可以 做什么就变得显而易见了。 Git 关心的以及从存储库转移到存储库的是 commits。对于与提交图一起使用的 Git 算法,其中重要的部分是提交及其父/子关系。文件随手随走。
假设您从存储库中的一组提交开始,您从其他存储库复制了这些提交(因此其他存储库也有这两个分支):
...--o--o--o <-- master
\
o--o <-- develop
这里的每一轮o 代表一个提交。您创建了一个新分支 work,它指向 develop 指向的 same 提交:
...--o--o--o <-- master, origin/master
\
o--o <-- develop, origin/develop, work (HEAD)
(origin/* 的名字是你 Git 记住你的 Git 在 他们的 Git 上看到的东西的方式,所以只要你的 Git 没有从他们那里得到任何新的东西,你的 origin/* 名字仍然指向这些相同的提交。)
现在你在新分支上做一些工作并提交。让我们将这个新提交称为A,以便我们可以讨论它(实际上它有一些丑陋的哈希 ID):
...--o--o--o <-- master, origin/master
\
o--o <-- develop, origin/develop
\
A <-- work (HEAD)
如果您从您的 Git 存储库中git push,那么您可以提供给他们的唯一新的提交是A。
提交A 的实际ID,丑陋的大哈希,取决于一切关于提交A:这包括所有附加的文件到 提交A,并且你的develop 指向的提交是提交A 的父级。
如果您将提交 A 提供给其他 Git,则您有义务将与提交 A 相关的每个 文件 都提供给他们。如果他们没有所有文件,他们就没有提交A。
你可以做一个新的提交——我们称之为A'——这很像A,只是略有不同。让我们将A' 设为没有文件。不过,它的父级与A 的父级相同,并且它拥有所有other 文件——请记住,每个提交都是A 拥有的所有文件的完整快照。让我们将A' 放在develop 上,方法是使用git checkout develop,然后复制A,只是我们省略了一个文件:
...--o--o--o <-- master, origin/master
\
o--o <-- origin/develop
|\
| A' <-- develop (HEAD)
\
A <-- work
现在你可以让你的 Git 调用另一个 Git 并通过你的名字 develop 提供它,而不是 A,而是 A'。如果他们选择接受它,您的 Git 现在会记住 他们的 develop 指向 A'。
这种特殊的方法使用起来相当痛苦。如果你能找到其他方法,这不是要走的路。