修剪Git提交/压缩Git历史

时间:2010-02-20 15:58:37

标签: git branch

我每隔几分钟左右就会将我的代码检查到一个Git分支中,而这些评论最终会出现“Everything broken again again”和其他荒谬之处。

然后每隔几分钟/小时/天,我会做一个真正的评论,例如,“修复了第22,5号错误,第3次。” 我如何将这两个概念分开?我希望能够删除所有频繁提交,只留下严肃的提交。

4 个答案:

答案 0 :(得分:97)

答案 1 :(得分:27)

使用软重置代替重新基础来压制GIT历史记录

我认为VonC答案的长度说明了 - {字面意义 - 关于git rebase有多复杂。这是我another answer to a question of mine的扩展名。

  1. 您有一个从ticket-201分支的分支master。你想假装所有来自ticket-201的提交都没有发生,但是你一次性完成了所有的工作。
  2. 使用git reset --soft hash软重置到分支点,其中hash应该是ticket-201日志中的提交哈希值。
  3. 使用add then commit提交更改。现在,分支历史记录将只有第一个提交,而新的提交则包含新的东西。
  4. 从不同分支的任意提交中制作历史

    使用重置,您可以根据需要重写历史记录,但您的编辑将失去拥有正确时间戳的魅力。假设你不关心它(你的文件的时间/日期就足够了,也许?),或者如果你想要随意摆弄提交,你可以按照以下步骤操作:

    1. commit0结帐新分支(假装是哈希):git checkout -b new-history commit0
    2. 现在,您可以从commit5git reset --hard commit5
    3. 获取文件
    4. 切换回索引点:git reset --soft commit0
    5. 提交,这将是分支中的第二次提交。
    6. 这个想法简单,有效,灵活。

答案 2 :(得分:6)

使用壁球

最近,我一直在另一个分支机构工作并使用squash。另一个分支称为temp,然后我使用git merge temp --squash将其带入推送到服务器的真实分支。

工作流就是这样的,假设我在Ticket65252工作:

git branch -d temp #remove old temp bbranch
git checkout -b temp
# work work work, committing all the way
git checkout Ticket65252
git merge temp --squash
git commit -m "Some message here"

优于使用rebase 的优势?方式不那么复杂。

优于使用reset --hard然后使用reset --soft的优势?不那么容易混淆且容易出错。

答案 3 :(得分:0)

使用git rebase -i一起挑选和压缩你的提交。