Git 源树中的南瓜
可以在SourceTree中挤压吗?我看到,显然,您可以“拖放”提交,以便压扁它们。但是,当我这样做时,它只会突出显示几个提交。更新了答案 用于Windows的SourceTree ,您现在可以进行交互式重设,这将允许您挤压 Mac的SourceTree 交互式重基已在(emphasis mine)中提供:Git 源树中的南瓜,git,atlassian-sourcetree,Git,Atlassian Sourcetree,可以在SourceTree中挤压吗?我看到,显然,您可以“拖放”提交,以便压扁它们。但是,当我这样做时,它只会突出显示几个提交。更新了答案 用于Windows的SourceTree ,您现在可以进行交互式重设,这将允许您挤压 Mac的SourceTree 交互式重基已在(emphasis mine)中提供: git-rebase–interactive命令允许您在创建提交后(但在将其公开之前)重新组织提交,现在您可以在SourceTree中执行此操作通过拖放操作将多个提交组合(挤压)在一起,或对
git-rebase–interactive
命令允许您在创建提交后(但在将其公开之前)重新组织提交,现在您可以在SourceTree中执行此操作通过拖放操作将多个提交组合(挤压)在一起,或对其重新排序。您还可以更改提交消息,或编辑提交的内容。只需右键单击日志中的提交并选择“以交互方式重新设置
的子项的基础”即可启动该过程
旧答案
显然,压缩提交是中的一个功能
但是,该功能在SourceTree的Windows版本中似乎不可用,该版本目前仍为1.0.8版本。
使用命令行
您仍然可以选择使用命令行挤压提交:
git rebase -i <sha-of-base-commit>
要了解有关如何使用命令行挤压提交的更多信息,请参阅。他们刚刚在Windows版本中添加了对“挤压”的支持
从1.4.1.0开始,Windows用户仍然没有壁球。但是,您可以手动获得相同的结果 要将分支A压入分支B,请执行以下操作:
1. 2. 3. 4.
* <- [A][C] * <- [A] * <- [A] * <- [A]
| | | |
* * o <- [C] with changes * o <- [C][B] with changes * * <- [C][B] committed
| |/ |/ |/
* <- [B] * <- [B] * *
| | | |
: : : :
1。2.3.4.
*
在父提交上单击鼠标右键,然后选择“以交互方式重新设置的子项的基础”。之后,您将能够拖放以挤压提交
在您自己的地方特色分支机构内进行老派压榨
这个答案适用于任何平台上的大多数版本的Sourcetree,因为我只使用旧功能。想想看,这很简单。和往常一样,它只在公开你的作品之前起作用。我使用它在共享存储库中创建“整洁”提交,同时在我自己的本地存储库中频繁提交。假设您在本地分行myfeature
。假设您在分支origin/myfeature
之前有几个提交。在整个过程中,您可以留在branchmyfeature
中,这样您就不会影响其他人的工作
第一步
在最新发布的提交上执行“将当前分支重置为此提交”。这是标记为origin/myfeature
的提交。混合重置将保留所有更改。一定要检查你的重置是混合的。(如果你不小心做了一个硬重置,你将失去你的工作…)
步骤2
阶段性的改变(像往常一样)。不要忘记在途中添加或删除的文件
步骤3
承诺。编写一个好的提交消息,总结您自己的所有(本地)提交消息,因为它们已丢失
完成!
在步骤1中,您已经挤压了所有内容并清理了本地提交。您仍然在自己的特性分支上,因此您没有影响其他任何东西。如果你感到不安全,在做任何其他事情之前,给你最近的承诺贴上标签。只是为了安全保管。以这种方式,您可以随时硬重置到该标签,以防出现问题。如果一切正常,只需删除该标签即可清理提交历史记录。若要最后10次提交,请挤压最新提交
1) git reset HEAD~10
2) git add .
3) git commit -am "single commit message for 10 last changes"
4) git push --force
很抱歉,我看不到1.2发行说明中提到支持“squash”的部分。免责声明:只有在“公开之前”尝试它,它才可能正常工作。我已经将以前的更改推送到了远程
,然后在本地将其还原,并在尝试将推送到远程
时出错。由于我不需要旧的更改,我使用@Ricardo中的CLIgit push--force origin e3f1e37:master
修复了此问题。但是,强制推送和更改已公开的历史记录时应该非常小心,因为您可能会导致其他在旧承诺基础上工作的人失去工作。
1) git reset HEAD~10
2) git add .
3) git commit -am "single commit message for 10 last changes"
4) git push --force