38

是否可以在 SourceTree 中进行压缩?我看到显然您可以“拖放”提交以压缩它们。但是,当我这样做时,它只会突出显示几个提交。

4

6 回答 6

32

更新的答案

适用于 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 书籍中的压缩提交。

于 2013-08-21T05:23:48.870 回答
8

右键单击父提交并选择“以交互方式重新设置 <sha> 的子代”。之后,您将能够拖放到 squash 提交。

https://community.atlassian.com/t5/Sourcetree-questions/In-SourceTree-how-do-I-squash-commits/qaq-p/345666#M10317

于 2014-07-16T14:45:21.253 回答
6

从 1.4.1.0 开始,Windows 用户仍然没有 squash。但是,您可以手动获得相同的结果。

将分支 A 压缩到分支 B:

  1. 从 A 创建一个分支并将其命名为 C。
  2. 在软模式下将 C 重置为 B。
  3. 看看 B。
  4. 犯罪。

    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 是你的朋友。

于 2013-12-06T03:21:28.480 回答
5

压缩你最近的提交,如果你想持续 10 次提交

1) git reset HEAD~10
2) git add .
3) git commit -am "single commit message for 10 last changes"
4) git push --force
于 2019-09-18T11:51:17.087 回答
1

在您自己的本地功能分支中进行旧式挤压

这个答案适用于任何平台上大多数版本的 Sourcetree,因为我只使用旧功能。很简单,想想就知道了。像往常一样,它只在您的工作公开之前有效。我使用它在共享存储库中创建“整洁”的提交,同时在我自己的本地存储库中频繁提交。假设您在本地分支机构myfeature。假设您在 branch 之前进行了几次提交origin/myfeature。您可以在整个过程中留在分支myfeature中,因此您不会影响其他任何人的工作。

步骤1

在最新发布的提交上执行“重置当前分支到此提交”。那是标记为 的提交origin/myfeature。混合重置将保留您的所有更改。请务必检查您的重置是否混合。(如果您无意中进行了硬重置,您将失去工作......)

第2步

分阶段进行更改(像往常一样)。不要忘记您在途中添加或删除的文件!

第 3 步

犯罪。编写一个好的提交消息,总结您自己的所有(本地)提交消息,因为它们丢失了。

完毕!

您已经在第 1 步中压缩了所有内容并清理了本地提交。您仍然在自己的功能分支上,因此您没有影响其他任何事情。如果您感到不安全,请在执行任何其他操作之前标记您最近的提交。只是为了安全保管。这样一来,如果出现问题,您始终可以硬重置为该标签。如果一切正常,只需删除该标签即可清理您的提交历史。

于 2017-05-02T07:57:11.307 回答
-6

他们刚刚在 Windows 版本中添加了对“squash”的支持。

适用于 Windows 的 SourceTree 1.2 版

于 2013-09-23T17:02:01.230 回答