【问题标题】:Git: simplest way of squashing commits on master [duplicate]Git:在master上压缩提交的最简单方法[重复]
【发布时间】:2012-01-03 01:50:30
【问题描述】:

可能重复:
How can I squash my last X commits together using git?

我在 GitHub 上托管了一个项目,并且我有一个本地克隆。我有大量的小提交已经推送到 GitHub。这一切都是使用默认的 *master 分支完成的。

我对 merge --squash 和 rebase 等感到困惑...... 将多个历史提交合并为一个提交以将其推送到 GitHub 的最直接方法是什么?

【问题讨论】:

    标签: git github


    【解决方案1】:

    在开始之前,您应该确保git status 是干净的(即该命令没有输出)以避免丢失工作。做你想做的最简单的方法可能是:

    git reset --soft <LAST-COMMIT-THAT'S-OK>
    git commit -m 'Many squashed commits'
    git push --force origin master
    

    您应该记住,这是重写历史记录(这就是为什么您需要将 --force 选项更改为 git push),因此如果其他人可能已经从您的存储库中克隆或拉取,您应该避免这种情况。如需更多替代方案,请参阅此问题及其答案:

    【讨论】:

    • 如果其他分支定期从 repo 中提取(仅限快速转发),这样做会有什么影响?
    • @whoami:如果其他人拉了那个分支,他们会看到(forced update) 并且 git 会拒绝更新他们的分支。然后他们需要 (a) 确保他们的所有工作都已提交 (b) 通常要么变基(例如使用git rebase origin/master),要么将他们的分支重置为刚刚被强制更新的远程跟踪分支版本(例如使用@987654328 @)。除非您乐于向人们解释该做什么,否则绝对最好不要强行改写历史。
    • 他们都会看到他们的本地分支和远程分支已经分道扬镳,必须合并更改,而不仅仅是快进。
    • @Noufal Ibrahim:在这种情况下合并的问题在于,他们的合并master 分支中的所有小提交仍然存在,并且可能会将它们推回存储库。
    • @whoami:是的,最好将历史重写限制为您尚未推送的提交。如果您确切地知道要压缩所有最后的 N 次提交,reset --soft 和提交可能更容易,但如果您想有选择地压缩和重新排序提交,使用 git rebase -i 将为您提供这种灵活性。 (也要看你比较熟悉哪些命令...)
    猜你喜欢
    • 2019-08-14
    • 2013-01-08
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2012-11-20
    • 2021-04-30
    • 1970-01-01
    相关资源
    最近更新 更多