【问题标题】:Git pre-commit hook that prevents a commit if there are upstream changes如果有上游更改,Git 预提交钩子会阻止提交
【发布时间】:2019-02-15 16:01:07
【问题描述】:

假设我正在处理feature/foo...如果remotes/origin/feature/foo 发生更改,是否有办法阻止 git 提交?

在进行新的提交之前合并更改有什么好处吗?

我唯一能想到的就是强制我们使用 git stash,合并更改(希望冲突比其他方式少),然后使用git stash apply

【问题讨论】:

  • 为什么不提交然后git pull --rebase
  • 听起来是让您的本地更改被意外破坏的好方法
  • 我认为这里的一个好问题是您为什么觉得有必要这样做?这实际上是 git 设计的工作方式,允许并行完成对相同文件的更改,然后合并这些更改(或者如果您喜欢线性时间线,您可以使用 rebase)。为什么你觉得有必要阻止这种使用方式?

标签: git git-merge githooks git-commit git-rebase


【解决方案1】:

您的问题的指针:原则上您可以使用git fetch 获取远程存储库的状态。此命令获取远程状态并更新 origin/feature/foo 分支。你应该可以使用它来构建你想要的钩子。

但是!原则上,您只是想重新创建一种使用 git 之类的颠覆的情况。 git 的一大优势是,您可以完全独立于远程存储库进行提交。 (例如,如果您在 narnia 内部或其他地方离线时犯了错误,请执行提交并使用它们来恢复)

如果您遇到合并冲突太大而无法处理的问题,这似乎更像是您的流程中的问题。也许尝试专注于较小的功能分支以防止大的合并冲突。

所以我猜想用提交钩子解决这个问题并不是最好的方法。

【讨论】:

  • 很好的推理。更不用说这样做可能会不经询问就暗中破坏本地工作。提交后,所有内容都会记录下来,您可以解决问题。
  • 它可能有助于避免小提交,并起到提醒合并更改的作用,但您可以使用 --force 或其他东西覆盖它
  • 为什么要避免小提交?在推动清理您的系列以供发布之前进行交互式 rebase,git 也非常适合初稿工作。
  • 小提交是红利而不是问题。如果你不想在你的公共历史中提交太多的小提交,你可以在推送之前重新设置(壁球)。在所有其他情况下,小提交为您在调试(二等分)和返回时提供了更大的灵活性,如果您进行的实验不起作用(尽管我更喜欢分支)
猜你喜欢
  • 2013-12-15
  • 1970-01-01
  • 2012-12-07
  • 2015-08-17
  • 2019-07-12
  • 2015-01-13
  • 2018-05-21
  • 1970-01-01
相关资源
最近更新 更多