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

Blu*_*zee 5 git git-rebase

临Git的书强烈建议遵循这个规则:

不要重新生成存储库外部的提交.

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

我的意思是,如果你不确定你是否发布了你最近提交的全部或部分内容(也许你参与了几个使用Git的项目,你刚刚切换回你的一个项目).

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

lar*_*sks 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
Run Code Online (Sandbox Code Playgroud)

这告诉我们,我们有一项尚未推送到上游的提交。我们可以使用git log这些提交的列表:

$ git log --oneline origin/master..master
bc9dacf added another file
Run Code Online (Sandbox Code Playgroud)

因此,有一个未发布的提交列表,我们可以在不影响任何协作者的情况下随意重新设置基础。只要您将自己限制在这些范围内,您就处于良好状态。

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

如果您正在协作的上游项目有一个基于 GitHub Pull Request、Gerrit或类似内容的工作流程,那么您无需担心很多:因为您永远不会推送到共享存储库,所以您的更改将只是如果您设法以与上游代码的状态不兼容的方式对本地存储库进行变基,则会被拒绝。