如何执行 Git "Do not rebase published commits" 规则?

How to enforce the Git "Do not rebase published commits" rule?

Pro Git book强烈建议遵循这条规则:

Do not rebase commits that exist outside your repository.

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

我的意思是,以防万一您不确定是否发布了全部或部分最近的提交(也许您参与了多个使用 Git 的项目,而您只是切换回了一个您的项目)。

或者这个问题只是胡说八道?我不是 Git 专家。

通过将当前分支与上游分支进行比较,您可以获得本地存储库中 "unpushed" 次提交的列表。例如,类似于:

$ 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

所以有一个我们可以变基的未发布的提交列表 willy-nilly 不影响任何协作者。只要你限制 你自己对这些你身体很好。

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

如果您合作的上游项目有工作流程 基于 GitHub 拉取请求,或 Gerrit,或类似的东西, 你不用担心很多:因为你从不强迫 共享存储库,如果你有,你的更改将被拒绝 设法以不兼容的方式重新定位您的本地存储库 与上游代码的状态。