是否可以在 SourceTree 中进行压缩?我看到显然您可以“拖放”提交以压缩它们。但是,当我这样做时,它只会突出显示几个提交。
6 回答
更新的答案
适用于 Windows 的 SourceTree
从 1.5 版开始,您现在可以进行交互式变基,这将允许您进行 squash。
适用于 Mac 的 SourceTree
自 1.6 版以来,SourceTree for Mac中提供了交互式 rebase (强调我的):
该
git rebase –interactive
命令允许您在创建提交之后(但在将它们公开之前)重新组织提交,现在您可以在 SourceTree 中执行此操作。只需拖放即可将多个提交合并(压缩)或重新排序。您还可以更改提交消息,或编辑提交的内容。只需右键单击日志中的提交并选择“Rebase children of interactive”即可启动该过程。<sha>
旧答案
显然,压缩提交是Mac 版 SourceTree 1.6 版中的一项功能。
但是,该功能似乎在 Windows 版本的 SourceTree 中不可用,目前仍为 1.0.8 版本。
使用命令行
您仍然可以选择使用命令行来压缩提交:
git rebase -i <sha-of-base-commit>
在TODO
列表中,s
在提交旁边放置一个(用于 squash)以将 squash 压缩到上一个提交中:
pick e953225 Add meow meow meow
s def892d Add master
要了解有关如何使用命令行压缩提交的更多信息,请参阅免费在线 Pro Git 书籍中的压缩提交。
右键单击父提交并选择“以交互方式重新设置 <sha> 的子代”。之后,您将能够拖放到 squash 提交。
从 1.4.1.0 开始,Windows 用户仍然没有 squash。但是,您可以手动获得相同的结果。
将分支 A 压缩到分支 B:
- 从 A 创建一个分支并将其命名为 C。
- 在软模式下将 C 重置为 B。
- 看看 B。
犯罪。
1. 2. 3. 4. * <- [A][C] * <- [A] * <- [A] * <- [A] | | | | * * o <- [C] with changes * o <- [C][B] with changes * * <- [C][B] committed | |/ |/ |/ * <- [B] * <- [B] * * | | | | : : : :
如果不需要保留 A 的位置,则不需要创建 C。
我建议gitk
在执行这些操作时打开一旁,因为在关闭之前您可以看到所有分离的提交。(我想在 SourceTree 中看到这种慷慨)
至少,reflog 是你的朋友。
压缩你最近的提交,如果你想持续 10 次提交
1) git reset HEAD~10
2) git add .
3) git commit -am "single commit message for 10 last changes"
4) git push --force
在您自己的本地功能分支中进行旧式挤压
这个答案适用于任何平台上大多数版本的 Sourcetree,因为我只使用旧功能。很简单,想想就知道了。像往常一样,它只在您的工作公开之前有效。我使用它在共享存储库中创建“整洁”的提交,同时在我自己的本地存储库中频繁提交。假设您在本地分支机构myfeature
。假设您在 branch 之前进行了几次提交origin/myfeature
。您可以在整个过程中留在分支myfeature
中,因此您不会影响其他任何人的工作。
步骤1
在最新发布的提交上执行“重置当前分支到此提交”。那是标记为 的提交origin/myfeature
。混合重置将保留您的所有更改。请务必检查您的重置是否混合。(如果您无意中进行了硬重置,您将失去工作......)
第2步
分阶段进行更改(像往常一样)。不要忘记您在途中添加或删除的文件!
第 3 步
犯罪。编写一个好的提交消息,总结您自己的所有(本地)提交消息,因为它们丢失了。
完毕!
您已经在第 1 步中压缩了所有内容并清理了本地提交。您仍然在自己的功能分支上,因此您没有影响其他任何事情。如果您感到不安全,请在执行任何其他操作之前标记您最近的提交。只是为了安全保管。这样一来,如果出现问题,您始终可以硬重置为该标签。如果一切正常,只需删除该标签即可清理您的提交历史。
他们刚刚在 Windows 版本中添加了对“squash”的支持。