Git - 压缩整个分支 - 一行压缩命令

标签 git squash git-squash

在编写新代码时,我会进行许多小的提交来跟踪我的更改。但是,我的公司更喜欢将每个功能作为单个提交提交。所以解决方案是将我的整个(本地)分支压缩为单个提交。

如何在不使用 git rebase --interactive 然后将所有提交的 pick 更改为 squash 的情况下压缩整个分支?

最佳答案

我的首选方法是双线(不包括下面的步骤 1 和 4)。好处是您不需要知道/记录任何提交 ID,您可以编写一个简单的别名来执行所有涉及的步骤,并且您实际上将整个分支移动到 origin/master 以便实际 merge 到 master 可以快进,不会有任何冲突。

首先,我的假设:

  • 您正在处理名为 my-feature-branch 的分支。这个分支已经从 master 中分离了几次提交;这是 checkout 的分支。
  • 你的本地 master 跟踪远程分支 origin/master
  • 您想将所有来自 my-feature-branch 的提交压缩到 origin/master 的当前状态之上的单个提交(不是您的本地 master,可能已过时)
  • 您的所有更改都已提交,您没有未暂存的更改(它们将在 git reset --hard 期间丢失)

我的流程如下:

  1. 获取,所以 origin/master 是当前的:

    $ git fetch
    
  2. 通过将本地分支重置为指向 origin/master

    来丢弃本地分支上的所有提交
    $ git reset --mixed origin/master
    
  3. 将分支先前状态的所有旧更改 merge 到索引中

    $ git merge --squash HEAD@{1}
    
  4. 提交您的更改 - Git 将在您的编辑器中预先填充一条提交消息,其中包含压缩提交中的所有提交消息

我提到的简单别名是:

alias squash="git fetch; git reset --mixed origin/master; git merge --squash HEAD@{1}"

关于Git - 压缩整个分支 - 一行压缩命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27693286/

相关文章:

git - JGit 列出远程标签并按创建日期排序

Git 交互式 rebase 挤压提交 - 任何快捷方式

git 自动压缩提交到更改相同文件的先前提交

git - Cherry 选择压扁的提交

git - 如何将提交分成多个 squashes

git - 推送后压缩提交

git - 如何在当前 HEAD 和推送中的最新文件之间的预接收 Hook 中获取文件的 git diff?

git - 恢复原始 merge 后 merge

python - makemessages "should be run from the Django Git tree or your project or app tree"上的 Django 错误

git - Squash 在 GitHub PR 上提交