当我在编写新代码的时候,我会做很多小的提交来跟踪我的更改。然而,我的公司更喜欢将每个特性作为单个提交提交。因此,解决方案是将我的整个(本地)分支压缩为一个提交。
如何在不使用git rebase --interactive并将所有提交的pick更改为squash的情况下压缩整个分支?
发布于 2014-12-30 07:26:19
我的首选方法是双线性方法(不包括下面的步骤1和4)。好处是您不需要知道/记录任何提交ID,您可以编写一个简单的别名来执行所有涉及的步骤,并且您实际上将整个分支移动到 so /master上,因此实际合并到master中可以是快进的,并且不会有任何冲突。
首先,我的假设是:
,,
my-feature-branch的分支。此分支与master存在多次提交差异;这是已签出分支。origin/master master跟踪远程分支要将my-feature-branch中的所有提交压缩到当前origin/master状态之上的单个提交中(而不是您的本地master,这可能已过期)我的流程如下:
origin/master是最新的:$ git fetch
origin/master来丢弃所有提交$ git origin/master
$ git HEAD@{1}
的所有提交消息
我提到的简单别名是:
alias squash="git fetch; git reset --mixed origin/master; git merge --squash HEAD@{1}"发布于 2019-09-25 22:38:36
这是git reset --soft的一个完美用例。
假设您有一个提交历史记录
D Your latest patch
C Your second patch
B Your first patch
A Someone else's work您没有阶段性更改,git status、git log或git show会告诉您当前正在提交D。
然后,git reset --soft B将获取提交C和D的累积更改,并将它们暂存以进行提交。然后,git commit --amend会将这些更改“合并”到提交B中。
使用方法如下:
git reset --soft B
git commit --amend第二个命令将打开编辑器,并提供编辑提交消息的机会。
请注意,如果您在开始此流程之前已经进行了阶段性更改(即,您已经完成了git add XXX,但没有使用git commit进行后续操作),那么这些阶段性更改也将被合并到提交中。
发布于 2014-12-30 07:29:10
最好的选择可能是在合并时使用git merge --squash。这将使您的分支保持原样,这通常更容易进行故障排除,因为您会有一些“我在提交Z中更改了特定功能”的概念,并且查看该特定提交时,您已经了解了您对多个文件所做的任何更改的所有上下文-查看单个提交是您开发路径的压缩结果,这会使您更难记住“哦,是的,我还必须在不同的文件中更改这另一件事……”。当你的整个路径都可用时,你也可以使用git bisect --在被挤压的情况下,它所能告诉你的就是“这个巨大的提交破坏了一些东西”。
使用git merge --squash的结果是在您要“合并”到的分支上执行一次提交,其中包含来自您的分支的累积更改,但它不会影响您的原始分支。
https://stackoverflow.com/questions/27693286
复制相似问题