有没有一种方法可以非交互地压缩大量提交?
我正在尝试压缩一系列提交 - HEAD 到 HEAD~3。有没有快速的方法来做到这一点,或者我需要使用 rebase --interactive ?
I'm trying to squash a range of commits - HEAD to HEAD~3. Is there a quick way to do this, or do I need to use rebase --interactive?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
确保你的工作树是干净的,然后
Make sure your working tree is clean, then
我个人喜欢 wilhelmtell 解决方案:
但是,我创建了一个别名并进行了一些错误检查,以便您可以执行此操作:
我建议设置建立实际运行脚本的别名,以便更容易(a)编写脚本代码和(b)通过错误检查进行更复杂的工作。下面是一个执行压缩工作的脚本。我将其放在主路径的脚本文件夹中。
挤压脚本 (squash.sh)
然后,要将 squash.sh 脚本连接到别名,我将以下内容添加到我的 .zprofile 中:
注意:您可以将您的别名任何你想要的。我有很多 git 快捷方式
g.
I personally like wilhelmtell's solution:
However, I made an alias with some error checking so that you can do this:
I recommend setting up aliases that actually run scripts so that it is easier to (a) code up your scripts and (b) do more complex work with error checking. Below is a script that does the work of squashing. I put that in a scripts folder in my HOME path.
Script for squashing (squash.sh)
Then to hook up that squash.sh script to an alias, I add the following to my .zprofile:
Note: You can make your alias anything you want. I have my a lot of my git shortcuts as
g.<myCommand>
要添加 wilhelmtell 的答案,我发现软重置到
HEAD~2
很方便,然后修改HEAD~3
的提交:这会将所有提交合并到
HEAD~3
提交并使用其提交消息。确保从干净的工作树开始。To add to the answer by wilhelmtell I find it convenient to soft reset to
HEAD~2
and then amending the commit ofHEAD~3
:This will merge all commits to the
HEAD~3
commit and use its commit message. Be sure to start from a clean working tree.我用过:
效果很好。只是不要尝试拥有以“pick”开头的行的提交日志:)
I used:
Worked quite fine. Just don't try to have a commit log with a line that starts with "pick" :)
使用以下命令压缩最后一次提交中的最后 4 次提交:
使用别名:
来自 https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
Use the following command to squash the last 4 commits within the last commit:
With the alias:
From https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
这是一个用来压缩最后 2 次提交的一行代码。在此示例中,将保留倒数第二次提交的消息。您可以根据需要更改该消息。
如果您为此命令创建别名并改用该别名,则该命令将非常有用。
Here is a one liner to squash the last 2 commits. In this example, the message of second last commit will be retained. You may change the message as you wish.
This command will be very useful if you create an alias for this command and use the alias instead.
自从分支从 master 分叉以来,要压缩所有内容:
To squash everything since the branch was forked from master:
你可以非常接近
这假设你是一个具有线性历史的主人。它不完全是一个挤压,因为它丢弃了中间提交。您需要修改新的 HEAD 来修改提交消息。
You can get pretty close with
This assumes you're on master with a linear history. It's not quite a squash because it discards the intermediate commits. You'd need to amend the new HEAD to modify the commit message.