git是否有一个“我是一个白痴”的开关来阻止没有分支的-f?

时间:2011-09-30 17:35:21

标签: git

我刚做了一个

git push -f 

没有包括我想要推送的分支,而git只是在我的回购中爆炸了。幸运的是,我们可以拼凑旧的仓库而不会遇到太多麻烦,但是如果我可以更改git中的设置以防止-f all或者做到这一点我就必须明确地执行它。

任何人都知道我可以为此更改设置吗?

3 个答案:

答案 0 :(得分:2)

您可以在远程仓库上设置pre-receive挂钩,以防止强制推送。您还可以确保只有在明确指定特定分支时才能执行强制推送。

您还可以设置本地存储库以更改git push的默认行为,以便它只推送当前分支:

  

例如,默认只将当前分支推送到原点   使用git config remote.origin.push HEAD。任何有效的(如   可以将下面示例中的内容配置为git的默认值   推动起源。

答案 1 :(得分:0)

git push.default 选项正是您所寻找的 来自http://git-scm.com/docs/git-config的git文档:

  

push.default

     

如果没有明确给出refspec,则定义git push应采取的操作。不同的值非常适合特定的工作流程;例如,在纯粹的中央工作流程中(即获取源等于推送目的地),上游可能就是你想要的。可能的值有:

     
      
  • 没有 - 除非明确给出refspec,否则不要推送任何内容(错误输出)。这主要是针对那些希望通过始终明确避免错误的人。

  •   
  • 当前 - 推送当前分支以更新接收端具有相同名称的分支。适用于中央和非中央工作流程。

  •   
  • 上游 - 将当前分支推回到其更改通常集成到当前分支(称为@ {upstream})的分支。如果您要推送到通常从中拉出的相同存储库(即中央工作流程),此模式才有意义。

  •   
  • 简单 - 在集中式工作流程中,如上游分支的名称与本地分支的名称不同,就像上游一样工作,增加安全性以拒绝推送。
      当推送到与您通常拉出的遥控器不同的遥控器时,请作为当前工作。这是最安全的选择,适合初学者   此模式将成为Git 2.0中的默认模式。

  •   
  • 匹配 - 推送两端具有相同名称的所有分支。这使得您正在推动的存储库记住将被推出的分支集合(例如,如果您总是在那里推送maint和master而没有其他分支,您推送的存储库将具有这两个分支,以及您的本地maint和master将推到那里。)   要有效地使用此模式,您必须确保在运行git push之前准备好推出所有要推出的分支,因为此模式的重点是允许您一次性推送所有分支。如果您通常只在一个分支上完成工作并推出结果,而其他分支未完成,则此模式不适合您。此模式也不适合推入​​共享中央存储库,因为其他人可能会在那里添加新分支,或更新控制范围之外的现有分支的提示。
      这是目前的默认设置,但Git 2.0会将默认设置更改为简单。

  •   

在您的情况下,您可能希望使用 git config --global push.default nothing 以确保在未明确指定refspec的情况下永远不会推送任何内容。

答案 2 :(得分:-1)

我认为没有这方面的设定。但我确实同意错误可能不包括分支名称和强制所有覆盖。如果Git有能力,如果没有指定分支,则禁用-f。也许我会提交补丁..