当不是你最近的提交时如何压缩你的提交
How to squash your commits when not being your recent ones
如果这些是您最近的提交,那么压缩您的提交似乎很容易 (Squash my last X commits together using Git)
但是如果我想压缩我的回购协议中的一些不是最近的提交怎么办,比如 HEAD~3
到 HEAD~6
。
有办法吗?
如果您还没有发布分支,您可以重写它的历史而不会产生任何副作用。
假设历史是A-B-C-D-E-F-G-H-I
,目标是压扁C-D-E-F-G
。
git checkout -b squash_branch G
git reset C --soft
git commit
git cherry-pick H I
新的历史记录将是 A-B-S-H'-I'
。
git rebase -i HEAD~6
然后在交互式编辑器中将 squash
(您可以缩写为 s
)放在您要压缩的提交前面,并将其他的保留为 pick
。
示例:
pick 043af87 message
s 8c0fa0e message
s b6c7116 message
pick c5d91a3 message
pick f20898f message
pick edcbad2 message
这可以通过交互式变基来完成。
如果您在提交 A
时有分支 master
,然后您使用提交 B
、C
、[=16= 创建了分支 my-branch
]、E
和 F
。您想要将提交 B
、C
和 D
压缩为 B'
.
确保您当前的分支是 my-branch
,然后启动交互式变基:
git rebase -i master
这将打开您的编辑器,其中包含将要执行的提交列表。每行代表一个提交,该行的第一个词表示对该提交执行的命令。将第一个提交 (B
) 保留为 pick
,并将接下来两个提交(C
和 D
)的命令更改为 squash
。保存并关闭编辑器。
在 git 完成处理提交 B
、C
和 D
后,将打开一个新编辑器,其中包含新提交 [=22] 的提交消息=].这将包含来自原始提交的提交消息的组合,但您可以将其更改为您想要的任何内容。一旦提交信息符合您的要求,保存并关闭编辑器。
一旦 git 处理完分支 my-branch
上的其余提交,my-branch
上的提交将是 B'
、E
和 F
.
请注意,如果您还没有推送您的提交,您应该只做一个变基。变基会改变你提交的哈希值,如果其他人已经拉取了原始提交,这将导致问题。
如果这些是您最近的提交,那么压缩您的提交似乎很容易 (Squash my last X commits together using Git)
但是如果我想压缩我的回购协议中的一些不是最近的提交怎么办,比如 HEAD~3
到 HEAD~6
。
有办法吗?
如果您还没有发布分支,您可以重写它的历史而不会产生任何副作用。
假设历史是A-B-C-D-E-F-G-H-I
,目标是压扁C-D-E-F-G
。
git checkout -b squash_branch G
git reset C --soft
git commit
git cherry-pick H I
新的历史记录将是 A-B-S-H'-I'
。
git rebase -i HEAD~6
然后在交互式编辑器中将 squash
(您可以缩写为 s
)放在您要压缩的提交前面,并将其他的保留为 pick
。
示例:
pick 043af87 message
s 8c0fa0e message
s b6c7116 message
pick c5d91a3 message
pick f20898f message
pick edcbad2 message
这可以通过交互式变基来完成。
如果您在提交 A
时有分支 master
,然后您使用提交 B
、C
、[=16= 创建了分支 my-branch
]、E
和 F
。您想要将提交 B
、C
和 D
压缩为 B'
.
确保您当前的分支是 my-branch
,然后启动交互式变基:
git rebase -i master
这将打开您的编辑器,其中包含将要执行的提交列表。每行代表一个提交,该行的第一个词表示对该提交执行的命令。将第一个提交 (B
) 保留为 pick
,并将接下来两个提交(C
和 D
)的命令更改为 squash
。保存并关闭编辑器。
在 git 完成处理提交 B
、C
和 D
后,将打开一个新编辑器,其中包含新提交 [=22] 的提交消息=].这将包含来自原始提交的提交消息的组合,但您可以将其更改为您想要的任何内容。一旦提交信息符合您的要求,保存并关闭编辑器。
一旦 git 处理完分支 my-branch
上的其余提交,my-branch
上的提交将是 B'
、E
和 F
.
请注意,如果您还没有推送您的提交,您应该只做一个变基。变基会改变你提交的哈希值,如果其他人已经拉取了原始提交,这将导致问题。