2011-11-21 46 views

回答

43

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

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

你应该记住,这是改写历史(这就是为什么你需要--force选项git push),所以你应该避免这种情况,如果其他人有可能克隆或从您的存储库中提取。对于一些更多的选择,看到这个问题,它的答案:

+2

什么是这样做,如果其他部门定期从回购拉动的影响(仅快速转发)? – Gabe

+1

@whoami:如果有人拉动那个分支,他们会看到'(强制更新)',git会拒绝更新他们的分支。然后,他们需要(a)确保他们所有的工作都是承诺的(b)通常要么重新绑定(例如,使用'git rebase origin/master'),要么将其分支重置为刚更新过的远程追踪分支版本例如'git reset --hard origin/master')。除非你很乐意向人们解释做什么,否则最好不要强迫重写历史。 –

+0

他们都会看到他们的本地分支机构和远程分支机构已经发生分歧,将不得不合并这些变化,而不仅仅是快速前进。 –