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
.
它允许将本地分支推送到具有不同名称的远程分支。
在我压缩的几次 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
.
它允许将本地分支推送到具有不同名称的远程分支。