为了账号安全,请及时绑定邮箱和手机立即绑定

裁剪Git提交/压缩Git历史记录

裁剪Git提交/压缩Git历史记录

Git
墨色风雨 2019-07-12 19:11:48
裁剪Git提交/压缩Git历史记录我每隔几分钟将我的代码签入一个Git分支中,这些评论最终会变成“一切都坏了,重新开始”之类的东西,以及其他荒谬的东西。然后每隔几分钟/每小时/每一天,我就认真地提交一条真正的评论,比如“修正bug#22.55,第三次”。我如何区分这两个概念?我希望能够删除所有我经常提交的,只留下那些严重的。
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

用软复位代替重基对壁球历史的影响

我觉得长度Vonc的答案说明了很多-字面上说-是多么复杂git rebase是。这是我的扩展对我的一个问题的另一个回答.

  1. 你有一支树枝

    ticket-201

    你的分支

    master

    ..你想假装所有的提交

    ticket-201

    从来没有发生过,但你一举完成了所有的工作。
  2. 软重置到分支点,使用

    git reset --soft hash

    哪里

    hash

    中的提交散列。

    ticket-201

    原木。
  3. 使用Add提交更改,然后提交。现在,分支历史将只有第一次提交和新的提交与新的内容。

在不同的分支中根据任意提交创建历史

使用重置,您可以重写您认为合适的历史,尽管您的编辑将失去拥有正确的时间戳的魅力。假设您不关心这个问题(文件上的时间/日期可能就足够了?),或者如果您想在执行过程中篡改提交,可以执行以下步骤:

  1. 检查一个新的分支机构

    commit0

    (假装这是一个哈希):

    git checkout -b new-history commit0

  2. 现在你可以从

    commit5git reset --hard commit5

  3. 切换回索引点:

    git reset --soft commit0

  4. 提交,这将是分支中的第二次提交。

这个想法简单、有效、灵活。


查看完整回答
反对 回复 2019-07-12
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

用南瓜代替

最近,我在另一个分支工作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?不太容易混淆,也不容易出错。


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 1128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信