2017-08-03 62 views
0

我正在使用源代码树的git。Git - 阻止被推送的特定提交

我已经对分支的本地副本中的某些文件进行了3-4次更改。我将永远需要在本地进行这些更改,但我希望永远不会意外地将其推向远程。我当然可以保留这些更改未承诺,但这种方式我冒着丢失意外丢弃或清洁等情况下的变化。

有没有什么办法可以标记一些文件,永不被推送。

或者有什么更好的方法来达到我的目的。

有些是文件更改&一些新的文件我已经加入到本地仓库

+0

您可以为此分支添加预推钩以提醒您,如果适合您,您不应该推送任何提交吗? – kuskmen

+0

@kuskmen - 我想在这个分支做其他提交。只是不是这几个文件。 – user93353

+0

https://stackoverflow.com/questions/6644329/block-a-git-branch-from-being-Pushed中的一些有趣的想法,虽然它更多关于分支机构。 – Chris

回答

0

如果你想提交更改的话,建议在一个单独的分支这样做,你重订到主后,每的承诺你在那里做。然后,您可以在签出本地唯一分支的同时进行工作,然后在提交之前签出主设备,然后推送主设备,仅签出本地分支并在主设备上进行重设。

如果您不需要提交更改: 您可以尝试使用.git/info/exclude文件,该文件与.gitignore类似,但仅适用于本地计算机,并且未提交。

Gitdoc - Ignoring files

Explicit repository excludes 

If you don't want to create a .gitignore file to share with others, you can create rules that are not committed with the repository. You can use this technique for locally-generated files that you don't expect other users to generate, such as files created by your editor. 

Use your favorite text editor to open the file called .git/info/exclude within the root of your Git repository. Any rule you add here will not be checked in, and will only ignore files for your local repository. 

In Terminal, navigate to the location of your Git repository. 
Using your favorite text editor, open the file .git/info/exclude. 
+0

这不会阻止我在本地提交吗?我想本地提交。 – user93353

+0

您无法推送某些提交,并在git中排除其他提交。由于每个提交包含所有以前的提交,并且分支仅仅是提交的指针。如果你有一个提交A包含你不想推送的文件,那么从A创建一个提交B,如果你的分支在B,没有办法推动分支而不包括A和B – sp1nakr

+0

我添加了更新建议 – sp1nakr

-1

有新的文件比较简单的答案,但你以某种方式修改过的文件都有点困难。

对于新文件,您应该只能使用.gitignore。如果您不想将.gitignore添加到项目的.gitignore,那么您可以使用git向用户添加配置并忽略特定文件。假设您要忽略foo/目录中的所有文件。你可以做到这一点通过:

git config --global --add core.excludesfile $HOME/.gitignore 
echo "/foo" >> $HOME/.gitignore 

对于编辑的文件,你可能会创建一个新的文件,并修改您的初创公司寻找这些新文件正确。

+0

不会.gitignore也阻止我在本地提交?我想本地提交。 – user93353

+0

'.gitignore'防止添加但不推送。 – phd

2

我很抱歉,但有人要告诉你事实..你不能做你想做的。

你根本无法阻止提交被推送,除非它在另一个推送分支中。但在这种情况下,你不会同时拥有文件和你的开发分支。

答案你不想

对于新文件,有人说,你可以忽略它们。

对于已经跟踪的文件,您可以告诉git忽略git update-index --assume-unchanged <file>的本地修改,但这不会阻止git使用结帐删除更改,例如。

你能做些什么

我认为,唯一的选择就是改变你的应用程序如何加载这些文件(我认为他们是类似的配置文件)。

例如有一个可配置的本地文件夹,其中可以找到其他属性文件。此文件夹可能位于存储库之外,可能位于另一个存储库或备份其他服务