Git 用于变基和压缩临时提交的脚本

Git script to rebase and squash temporary commits

在我压缩的几次 Git 提交中,我需要一些手动工作来选择我想压缩的以前的提交。

有什么方法可以自动执行此操作 - 我的目标是压缩所有尚未推送到特定远程分支的先前提交。

详细来说,假设我有 1 个名为 "dev" 的本地分支和 2 个远程分支,public 和私有分支。我将我想要的所有内容提交并推送到私有遥控器,一个名为 "dev" 的分支,我们称之为 private/dev。但是在 public 远程我想保持干净整洁,并保留一个名为 "master" 的标准分支,我们称之为 public/master。所以就像我说的,对于所有尚未到达 public 远程主分支的提交,我想将它们压缩成一个大提交,然后推送到 public/master

我怎样才能做到这一点?好像很复杂。

您只需通过 public/master 创建一个临时分支(public 是您的 public 远程的名称,而 master - 例如 - 作为目标分支)

而你使用 merge --squash (see "In git, what is the difference between merge --squash and rebase?")

 git checkout -b temp public/master
 git merge  --squash dev
 # since merge --squash does not produce a commit:
 git commit -m "squash dev"
 git push public temp:master
 git checkout dev
 git branch -d temp

关于冒号语法,参见“git push branch to a new repo with a different name" and the examples section of git push.
它允许将本地分支推送到具有不同名称的远程分支。