【发布时间】:2012-01-03 01:50:30
【问题描述】:
我在 GitHub 上托管了一个项目,并且我有一个本地克隆。我有大量的小提交已经推送到 GitHub。这一切都是使用默认的 *master 分支完成的。
我对 merge --squash 和 rebase 等感到困惑...... 将多个历史提交合并为一个提交以将其推送到 GitHub 的最直接方法是什么?
【问题讨论】:
我在 GitHub 上托管了一个项目,并且我有一个本地克隆。我有大量的小提交已经推送到 GitHub。这一切都是使用默认的 *master 分支完成的。
我对 merge --squash 和 rebase 等感到困惑...... 将多个历史提交合并为一个提交以将其推送到 GitHub 的最直接方法是什么?
【问题讨论】:
在开始之前,您应该确保git status 是干净的(即该命令没有输出)以避免丢失工作。做你想做的最简单的方法可能是:
git reset --soft <LAST-COMMIT-THAT'S-OK>
git commit -m 'Many squashed commits'
git push --force origin master
您应该记住,这是重写历史记录(这就是为什么您需要将 --force 选项更改为 git push),因此如果其他人可能已经从您的存储库中克隆或拉取,您应该避免这种情况。如需更多替代方案,请参阅此问题及其答案:
【讨论】:
(forced update) 并且 git 会拒绝更新他们的分支。然后他们需要 (a) 确保他们的所有工作都已提交 (b) 通常要么变基(例如使用git rebase origin/master),要么将他们的分支重置为刚刚被强制更新的远程跟踪分支版本(例如使用@987654328 @)。除非您乐于向人们解释该做什么,否则绝对最好不要强行改写历史。
master 分支中的所有小提交仍然存在,并且可能会将它们推回存储库。
reset --soft 和提交可能更容易,但如果您想有选择地压缩和重新排序提交,使用 git rebase -i 将为您提供这种灵活性。 (也要看你比较熟悉哪些命令...)