重写GIT历史的实际后果是什么?
我们的项目现在一直在使用git一个星期左右,我们都很享受它(在一个紧密的合作团队中使用它变成了完全不同的git体验)。 为了让事情尽可能简单,我们不做任何重塑或历史修改。 但是我们在第一周确实犯了一些错误。 有些提交不应该完成,我们设法将一个功能分支合并到错误的集成分支(1.1而不是1.0)中。 直到他们进入我们的历史之前,我们才发现这些事情。
现在我看到很多关于重写历史的警告,但我不确定我是否了解涉及的危险。 我们使用共享裸仓库,并将所有分支推送到那里进行备份。
我希望如果你重写历史记录(比如说删除提交),后续提交的完整列表将“失去”那个提交(也可能不是编译/工作)。 我也希望如果发生这种情况,我实际上可以选择将其固定在历史的顶部(并且将历史的那部分作为非编译)。
任何关于这个主题的文章/教程的引用也将非常好。
必需的阅读是在Git用户手册中重写历史记录时遇到的问题。
如果我重写历史(并且所有受影响的分支都编译/工作),我的同事是否需要执行任何特殊命令(即,如果我做得好,他们是否“知道我已经完成了”)?
他们会知道,Git会毫不含糊地告诉他们有什么问题。 他们会得到意想不到的错误消息,并可能在试图解决所产生的合并冲突的过程中,无意中恢复先前的提交。 这个问题产生了一个真实的信息,如果你想知道发生了什么,你总是可以试试它的临时版本库。
具有我不知道的本地更改的任何用户是否有资格在git pull上发生合并失败?
绝对如上所述。
我在这里错过了什么?
避免重写历史(几乎)所有成本!
正如其他答案评论中提到的那样,实际上每个提交都是唯一的,重写历史记录会提交新的提交。
你可以把它看作是切掉一棵树的树枝,然后立即增长新树。 他们甚至可能看起来一样但不是。 是的,巫术魔法。 在这个比喻中,回复几乎就像支持一个日志下降的分支一样,所以它会在不下降的情况下增长。
这导致我们有几个很好的理由来重写历史:
那些已经揭示了格雷格已经说过的话:如果存储库是公开的(推送提交),重写历史记录将潜在地破坏每个人。 我为什么还主张避免在私人回购中不惜一切代价去做,只是为了保持良好的习惯:所以应该不惜一切代价来避免重写历史 (这意味着在做之前就给予足够的考虑:权衡利弊和利弊!)
至少有另一个哲学和被忽视的原因: 重写历史是数据丢失 。 诚然, revert
的git历史看起来可能比重reset
混乱。 但是,如果写得好,所有这些“烂摊子”都可以隐藏在分开的分支中,而且我们仍然可以准确地看到回复完成的位置。 甚至有理由或证据证明为什么这样做。
回到树的类比,即使你删除支持日志,恢复的分支将显示曲折的曲线,它很漂亮!
链接地址: http://www.djcxy.com/p/16981.html上一篇: What are the practical consequences of rewriting GIT history?
下一篇: Rollback a Git merge