是否有任何Git命令将我们所有丑陋的提交合并为一个?
当我在本地编写代码时,有时我会提交尚未完成的代码,或者将丑陋消息作为临时修订。
但是,当我希望我的代码与其他代码合并时,我只希望其他人可以看到的最终快照,(隐藏难看的修订)
防爆。 我将0分叉到我的本地存储库,我进行更改和测试并使用不干净的代码进行提交
0→1→2→3→4→5→6(最终代码)
当其他人拉代码时,是否有可能让其他人只看到最终状态? 并没有看到从1..5树
我想用户会看到像
0 -------------------> 6
我能想到的一种方法是创建一个补丁文件,但如果有某个文件必须被删除或创建,那么它不够好。
您可以使用reset --soft
将多个提交reset --soft
到一个新的干净提交中。 在最终代码中您的分支没有阶段性的变化,你可以这样做:
git reset --soft <sha1-of-0>
git commit
当git commit
提示时,给出一个清晰的提交消息,描述正在引入的完整更改。
做到这一点最灵活的方法是做一个互动的重新组合,或者修改你的提交。 但是,您必须小心,不要重写任何已公开的历史记录。 例如,如果您正在使用master
分支,并且想要重写和线性化所有不在origin/master
提交(通常意味着尚未推送的工作),则可以执行以下操作:
git rebase -i origin/master
这将启动一个文本编辑器,其中显示的每个提交都不在起源/主文件中,从最旧到最新。 如果您想要将任何提交与前一个提交相结合,您可以将该行的开头从pick
改为squash
。 或者,如果您想以某种方式修改该提交,则可以更改pick
以进行edit
。
使用交互式数据库是实现你所要求的最灵活的方式,它是一个非常有用的工具,但是在你描述的确切情况下,它可能是矫枉过正的。 首先,检查git status
的输出是否干净,以确保您的暂存区域与HEAD
具有相同的状态。 然后你可以做一个“软重置”回到0
,这会将HEAD
重置为该提交,但会使工作树和索引(即暂存区)保持不变。 如果你做了提交,你的索引将被用来创建一个与6
相同的状态的新提交,但以0
作为父代。 即
git status # Check that your status is clean
git reset --soft 0
git commit -m 'Work that is totally flawless'
是的,使用git rebase -i
,并压缩提交。 检查这个更多的信息和一些例子。
上一篇: Are there any Git command to combine all our ugly commits together to one?
下一篇: Merge conflicts ruin my commit message while squashing commits