有git清理历史的最佳做法是什么?

时间:2015-04-21 08:41:25

标签: git github git-rebase

阅读git工作流程,我想知道历史重写的适当性。我的工作流程,我想象其他许多工作流程,是:

  • 使用Github存储库,让我们称之为rep1
  • 做一个叉子,那将是rep2
  • git克隆它在本地工作,那是rep3
  • 进行更改,提交至rep3
  • 一旦我完成,推进rep2并在制作PR之前向其他人询问反馈

当我得到反馈时,似乎我想要做一些变相和压力,因为反馈往往是一些小问题,比如重写评论或者本来应该有所不同的事情,并且不值得他们自己承诺。

但是从文档来看,似乎我不应该在rep2上改变历史记录,事实上像--ammend这样的东西在这种情况下不起作用。我的工作流程是错误的,还是我误解了有关改变历史的警告?

2 个答案:

答案 0 :(得分:5)

一般经验法则从不重写已发布的历史记录。有可能有人已经提交了你的提交;如果你改写历史记录,这些人一旦撤回重写的历史记录就会陷入困境。

不太严格的经验法则:在某些情况下,当您完全确定您是唯一正在处理该历史记录时,可以认为重写已发布的历史记录是可以的。分支。

就个人而言,我认为可以在GitHub存储库的invidivual fork中重写已经推送的功能分支的历史记录,因为我不希望其他任何人在该分支上工作。不过,这只是个人意见。

答案 1 :(得分:2)

关于rebase的规则是这样的:你应该只改变你的本地分支一旦分支是一个公共分支,任何人都可以抓住它,你不应该再次在这个分支上重新绑定,或者你可以破坏已经克隆过这个分支的所有其他回购。

如果由于某种原因您决定rebase公开(推送分支),您必须确保所有撤消此分支的用户都知道您的rebase

你可以使用git pre-rebase hook来检查它以拒绝rebase或在这种情况下显示警告或错误