git - reorder提交安全

时间:2011-12-21 02:52:41

标签: git rebase

我发现通过git rebase -i重新排序提交在处理删除的文件时可能不会产生相同的最终结果树 - 并且可能没有警告或错误消息。

采取以下提交顺序

A - Add foo1
B - Add foo2
C - Remove foo2, Add Foo3

使用git rebase -i重新排序从A-B-C到A-C-B的提交会导致fAD2出现在HEAD中。

如果重新排序会改变最终生成的树,有没有办法重新排序那些咆哮的提交?

我认为git rebase在内部使用git am来应用补丁。我没有看到git am的任何相关参数可用于在删除不存在的文件时强制失败,这是我认为需要的。我是否需要修补git源代码才能获得我想要的内容?

2 个答案:

答案 0 :(得分:0)

你是否让文件的内容有很大不同?如果它们太相似,可以看作是一个举动。当您尝试应用修补程序删除不存在的文件时,您应该因冲突而停止。

希望这有帮助。

答案 1 :(得分:0)

您可以重新定位,比较结果,然后可能重置为旧状态。

的简单组合
  • git stash save --include-untracked进入清洁状态
  • git rev-parse HEAD获取当前提交的哈希值
  • git rebase做实际工作
  • git checkout the_previously_saved_hash .在重新定位之前恢复状态
  • git clean -fd摆脱所有多余的文件
  • git commit -m "Undoing the changes introduces by rebase."如果rebase没有引入任何更改,则可能会失败(可以忽略此故障)
  • git stash pop重新介绍被污染的"污染"

应该......我想我会尽快制作一个这样的剧本,因为它也是我需要的东西。