问题标签 [git-squash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
10765 浏览

git - Squash 直接在功能上提交,无需变基或合并

我一直在阅读一些关于--squashing 提交的内容,但它们似乎都与--rebase.

我有一个功能分支,其中包含一组这样的提交:

假设我想合并回Master分支,但我想先清理我的功能上的提交。

是否有可能:

  • 选择提交 B、E 和 F 并将它们压缩在一起作为一个提交?

或者

  • 我可以只压缩按顺序提交的提交,所以压缩:(A、B 和 C)或压缩(D、E 和 F)等?

无论哪种方式,我可以直接在我的功能上做一个壁球,而不立即初始化 aMergeRebase使用它吗?

如果是这样,我怎么能用 Git 做到这一点?

0 投票
1 回答
150 浏览

git - 哪些因素会影响 git repo 的大小

我想知道哪些因素会影响 git repo 的大小,当然数据除外。

历史悠久是否意味着大回购?有很多分支对它有影响吗?

另外你们如何处理你的提交?我读到每个提交都应该至少添加一个逻辑更改单元。我知道提交可以在推送之前通过变基来压缩。(当然永远不要变基发布)。

所以我不知道我是否应该把它们压扁。因为我不知道它是否会改变大小。

谢谢

0 投票
3 回答
12258 浏览

git-commit - Git Squash 并删除以前的提交

也许我误解了 GIT 的工作原理。

我已经跑了git rebase -i HEAD~10,我可以将 10 个提交压缩为一个。问题是所有压缩的提交仍然存在,我认为在将它们全部合并为一个之后它们会被删除。

这是预期的结果吗?如果是这样,我可以重写历史记录以删除无用的提交(因为这些更改已经在所有以前的提交都被压缩的提交中)?

0 投票
0 回答
227 浏览

windows - Git 压缩合并与缺少提交消息内容的冲突

当我执行git merge --squash <source_branch>导致冲突的操作时,来自 Git 的预定义提交消息内容仅包含冲突信息,而不包含压缩提交的摘要。

如何让 Git 也包含有关已被压缩的提交的信息?通常 Git 会写“Squash of the following commits:”,然后显示git log已放入 squashed 提交中的提交。

使用 git 版本 1.9.5.msysgit.1

0 投票
0 回答
261 浏览

git - 撤消git中的交互式rebase后恢复提交列表?

我的情况:有两个遥控器,originfork(后者归我所有)。我检查了origin/devel,更改了一些代码并提交了 5x 到我的本地分支test。我将我的提交推送到fork/test.

然后我开始了一个交互式变基,在我的本地test分支上:

Git 打开了一个编辑器,其中列出了我的 5 个提交,准备好选择、压缩或其他任何内容。

我不小心关闭了编辑器,而不是删除所有内容或 Ctrl+C 和git rebase --abortgit 控制台。因此,它开始了变基。

为了撤消它,我使用了git reflogandgit reset --hard HEAD@{...}以及git checkout fork/test -B test后来,因为我的遥控器也应该包含 pre-rebase 状态。他们似乎都恢复了状态,但如果我再次启动 rebase,列表中将没有提交(只有一个noop条目)。

如何恢复变基前的原始状态,以便再次显示原始提交列表?

撤消 git rebase不涉及此问题。我主要感兴趣的是为什么会发生这种情况以及如何真正恢复变基,而不是如何更改rebase命令以再次获取提交列表(正如我所说,从我的角度来看git resetgit checkout没有正确撤消它)。

最终目标是在以后的某个时间将我的test分支重新定位到最新origin/devel的,压缩我自己的所有提交,因为testorigin/devel.

//编辑:看起来 Git 忘记了分叉点。但是,在我自己的提交之前git merge-base --fork-point origin/devel确实返回了提交,并给了我初始提交列表。那么为什么不再这样做呢?origin/develgit rebase -i that-commit--onto

0 投票
1 回答
509 浏览

git - 'git rebase -i master' 是否错误且不确定当前状态

我正在使用本地存储库,并且没有上游存储库。我有一个分支“master”,其中 HEAD 指的是最近的提交。为了完成某件事*,我做了一个:

它打开了编辑器窗口,所以我可以挑选和挤压。不确定接下来要做什么,我关闭了编辑器(没有进行任何更改)并被 git 告知:

成功地重新设置和更新了 refs/heads/master。

这是 git 响应的总和。

我在这里有两个问题:

首先,我的分支实际上有什么变化吗?我的分支现在处于什么状态?(我意识到这是 1 中的两个问题。)

其次,如果这个命令有影响,我该如何撤消?

0 投票
3 回答
2320 浏览

git - Git 与 --squash 合并,同时保留每次提交的日志

初始场景:

合并后我想要的--squash:

在分支master上,git log将是

继续在分支上开发development

再次与壁球合并:

在分支master上,git log将是

在分支development上,git log将是

我想与压缩的提交合并,master同时保持每个提交都在development.

我不知道如何实现。我的问题是我不知道如何在第一次合并中D指出,并且将包含而不是仅包含。EIB,C,D,E,F,G,HF,G,H

0 投票
2 回答
4820 浏览

git - 如何使用 SmartGIT 在一次提交中压缩从分支到主控的多个提交?

我有一个名为work_in_progress的分支,用于调试和测试带有许多小提交的代码。它们都有多余的提交消息。完成后,我想将壁球合并到分支。当使用--squash参数进行合并时,通常这是一个命令。

但是我该如何使用SmartGIT呢?

此处的文档How to perform squash merges似乎是错误的,因为没有选项"Branch contains selected commit and its parents"

How to perform normal merges and squash merges here的文档根本不起作用。我已经尝试过了,我仍然在日志中看到所有的小提交。之后我可以删除work_in_progress分支,一切都很好,但我希望在分支的历史记录中进行一次提交和一条提交消息。


编辑:这是我的提交对话框的屏幕截图。我想我错过了“简单提交”选项?!可能我没看懂说明书^^ 在此处输入图像描述


编辑 2:这是日志的屏幕截图。从顶部开始的第二次提交是使用 SmartGIT 完成的。您可以看到所有中间提交(包括消息)在历史记录中可见。该分支被称为 XYZ_work_in_progress。最后一次(最重要的)提交是使用“git merge --squash ABC_work_in_progress”完成的,但所有的提交都被吞掉了,所以这是一个干净的历史。分支的所有工作都通过一条消息累积到一个提交中:-) 在此处输入图像描述

0 投票
2 回答
503 浏览

git - 提交 PR 并提交更改后是否可以压缩 Git 提交?

我们正在学习 Git,我们使用 GitHub 作为我们的托管站点。

我们都分叉了upstreamrepo 并 PR 我们的提交upstream以获取我们的更改。

我们正在尝试学习如何压缩我们的提交以保持上游提交历史的整洁(ish)。

我们经常承诺:)

所以......如果我们提交一个拉取请求......然后项目维护人员然后在提交上添加评论(即对 PR 进行代码审查)......然后开发人员将解决问题并推动他们再次提交。

是否可以压缩这些提交以使 PR 只有一个提交?GH 中的评论(针对此 PR)会发生什么?

0 投票
1 回答
324 浏览

git - 使用 TortoiseGit 通过 rebase-squash 影响远程存储库

正如标题所示

我正在尝试将最后两个提交压缩为一个

https://github.com/dvdvideo1234/Test

并将其注册到 Github 远程仓库中,尽管它只在本地进行更改,而不提交它们..

我正在通过日志窗口执行此操作。右键单击 B 然后“将 master 重新定位到此 ...”

在这个过程之后,我希望远程仓库是“A,BCD”,而不是我电脑上的本地仓库。

我应该如何通过 TortoiseGIT 做到这一点。我正在使用客户端在 Windows 下工作: