如何强制执行Git“不要重新发布已发布的提交”规则?

时间:2015-07-09 13:17:01

标签: git git-rebase

Pro Git book强烈建议遵守此规则:

  

不要重新定义存储库外部的提交。

有没有一种简单的方法可以确保您不会违反规则?例如一组Git命令?

我的意思是,如果您不确定是否发布了最近提交的全部或部分内容(可能您参与了几个使用Git的项目,而您刚刚切换回其中一个项目)。< / p>

或者这个问题可能只是废话?我不是Git专家。

1 个答案:

答案 0 :(得分:2)

您可以通过将当前分支与上游分支进行比较,在本地存储库中获取“未删除”提交列表。例如:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

这告诉我们,我们有一个提交,我们还没有向上游推送。我们 可以使用git log到这些提交的列表:

$ git log --oneline origin/master..master
bc9dacf added another file

因此,我们可以修改一个未发布的提交列表 在不影响任何合作者的情况下不顾一切。只要你限制 你自己也处于良好的状态。

当然,您的部分问题是关于自动执行此行为。 在rebase操作之前调用了一个pre-rebase钩子,可用于强制执行此操作,但我想我会将其作为练习留给读者。我不相信这在实践中是个大问题。

如果您正在与之合作的上游项目具有工作流程 基于GitHub拉取请求,或Gerrit或类似的东西, 你不必担心:因为你永远不会推动 如果你有共享存储库,你的更改将被拒绝 设法以不兼容的方式重新定义本地存储库 与上游代码的状态。