合并后压缩 Git 提交
Squashing Git commits after merging
我有一个功能分支有一些提交(见下文)。自从分支以来,一些提交也被添加到 master 中。
所以我将 master
合并到 feature
分支中。
git checkout feature
git merge master
这导致 feature
分支上的以下日志历史记录:
* E (HEAD) merging master into feature
|\
| * D feature commit 2
| |
| * C feature commit 1
* | B master commit 2
|/
* A master commit 1
实际上,功能路径上的提交数量很大 (100+),我想将它们全部压扁。
有没有办法只压缩功能分支上的提交,同时保留 master
行上的提交?
是的,你可以。所以你想把你问题中的提交图变成这个新图:
* E (HEAD) merging master into feature
|\
| * D feature commit (squashes 1 and 2)
* | B master commit 2
|/
* A master commit 1
程序:
- 确保您的工作树是干净的。没有未提交的更改,没有暂存的更改,没有未跟踪的文件。
- 确保您在功能分支上。
git reset --hard *Hash of D on feature branch*
git reset --soft *Hash of A on master*
git commit
加上你想要的信息。
git merge master
如果问题仅解决所有提交都存在于本地存储库中的情况,那么问题(除了我的评论)已解决。如果仅涉及语言环境 git 存储库,则它等同于:
git checkout feature
git rebase -i
// mark all commits to be squashed
git merge master
但是您应该将 masterbranch 重置为 E
以发布您的更改:
git checkout master
git reset --hard feature
或(如果您真的更喜欢与 comitish 一起工作)git reset --hard *Hash of E*
。如果 C
已经被推送到远程存储库,我将检查 git reset
的使用是否有效。
我有一个功能分支有一些提交(见下文)。自从分支以来,一些提交也被添加到 master 中。
所以我将 master
合并到 feature
分支中。
git checkout feature
git merge master
这导致 feature
分支上的以下日志历史记录:
* E (HEAD) merging master into feature
|\
| * D feature commit 2
| |
| * C feature commit 1
* | B master commit 2
|/
* A master commit 1
实际上,功能路径上的提交数量很大 (100+),我想将它们全部压扁。
有没有办法只压缩功能分支上的提交,同时保留 master
行上的提交?
是的,你可以。所以你想把你问题中的提交图变成这个新图:
* E (HEAD) merging master into feature
|\
| * D feature commit (squashes 1 and 2)
* | B master commit 2
|/
* A master commit 1
程序:
- 确保您的工作树是干净的。没有未提交的更改,没有暂存的更改,没有未跟踪的文件。
- 确保您在功能分支上。
git reset --hard *Hash of D on feature branch*
git reset --soft *Hash of A on master*
git commit
加上你想要的信息。git merge master
如果问题仅解决所有提交都存在于本地存储库中的情况,那么问题(除了我的评论)已解决。如果仅涉及语言环境 git 存储库,则它等同于:
git checkout feature
git rebase -i
// mark all commits to be squashed
git merge master
但是您应该将 masterbranch 重置为 E
以发布您的更改:
git checkout master
git reset --hard feature
或(如果您真的更喜欢与 comitish 一起工作)git reset --hard *Hash of E*
。如果 C
已经被推送到远程存储库,我将检查 git reset
的使用是否有效。