Git pre-commit钩子,用于在上游发生更改时防止提交

Git pre-commit钩子,用于在上游发生更改时防止提交,git,git-merge,githooks,git-commit,git-rebase,Git,Git Merge,Githooks,Git Commit,Git Rebase,假设我正在处理feature/foo…如果对remotes/origin/feature/foo进行更改,是否有办法防止git提交 在进行新提交之前合并更改有什么好处吗 我唯一能想到的就是强迫我们使用git stash,合并更改(希望冲突更少),然后使用git stash apply?一个指针来回答您的问题:原则上,您可以通过git fetch获取远程存储库的状态。此命令获取远程状态并更新origin/feature/foo分支。您应该能够使用它来构建所需的钩子 但是!原则上,您只是试图重新创建

假设我正在处理
feature/foo
…如果对
remotes/origin/feature/foo
进行更改,是否有办法防止git提交

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


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

一个指针来回答您的问题:原则上,您可以通过
git fetch
获取远程存储库的状态。此命令获取远程状态并更新
origin/feature/foo
分支。您应该能够使用它来构建所需的钩子

但是!原则上,您只是试图重新创建一个使用git-like subversion的情况。git的最大优点是,您可以完全独立于远程存储库进行提交。(例如,如果您在纳尼亚或其他地方离线时出错,请执行提交并使用它们进行恢复)

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


因此,我想用提交钩子解决这个问题不是最好的办法。

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

但是!原则上,您只是试图重新创建一个使用git-like subversion的情况。git的最大优点是,您可以完全独立于远程存储库进行提交。(例如,如果您在纳尼亚或其他地方离线时出错,请执行提交并使用它们进行恢复)

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


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

为什么不提交然后
git-pull--rebase
?听起来是一个让本地更改被意外破坏的好方法。我想这里有一个好问题,那就是为什么你觉得有必要这么做?这实际上是git的工作方式,允许对相同文件的更改并行进行,然后在以后合并这些更改(或者如果您喜欢线性时间线,可以使用rebase)。为什么你觉得有必要阻止这种使用?为什么不提交然后
git-pull--rebase
?听起来是一种让本地更改被意外破坏的好方法?我认为这里有一个好问题,那就是为什么你觉得有必要这么做?这实际上是git的工作方式,允许对相同文件的更改并行进行,然后在以后合并这些更改(或者如果您喜欢线性时间线,可以使用rebase)。你为什么觉得有必要阻止这种使用?很好的理由。更不用说,这样做可能会暗中打击当地的工作而不问。一旦你有了一个提交,所有的事情都会被记录下来,你就可以解决这个问题。这可能有助于避免一个小的提交,并像一个提醒合并更改一样。不过,你可以用--force或其他什么来覆盖它为什么要避免小的提交?在推动清理您的系列以供发布之前,git对于初稿工作也非常优秀。小提交是一种奖励,而不是一个问题。如果您不希望在公共历史中有太多的小提交,那么可以在推之前重新设置(挤压)基址。在其他任何情况下,小提交都会让您在调试(对分)和返回时具有更大的灵活性,如果您做了一个不起作用的实验(尽管我更喜欢使用分支),那么就可以进行更好的推理。更不用说,这样做可能会暗中打击当地的工作而不问。一旦你有了一个提交,所有的事情都会被记录下来,你就可以解决这个问题。这可能有助于避免一个小的提交,并像一个提醒合并更改一样。不过,你可以用--force或其他什么来覆盖它为什么要避免小的提交?在推动清理您的系列以供发布之前,git对于初稿工作也非常优秀。小提交是一种奖励,而不是一个问题。如果您不希望在公共历史中有太多的小提交,那么可以在推之前重新设置(挤压)基址。在其他任何情况下,小提交都会使您在调试(对分)和返回时具有更大的灵活性,如果您进行的实验不成功(尽管我更喜欢使用分支)