【问题标题】:Git pushing to the past fixGit推送到过去的修复
【发布时间】:2014-08-18 18:15:30
【问题描述】:

我的一位同事正在测试他正在添加的一项新功能,不得不将他的窗口时间重置为 2 天前。当他完成他的功能时,他承诺并推动而不将日期设置回今天......

现在,develop 的结构与我本地的最新结构真的搞砸了,但告诉我我需要提取过去的 2 个新提交。

我们不知道如何解决这个问题。

我假设我们必须以某种方式重置/重新设置源上的最后 2 次提交,并在正确的时间将它们推回。因为现在看来,他成功地创建了一个全新的开发分支,只使用了他推送的那 2 个提交。

【问题讨论】:

    标签: git push commit history


    【解决方案1】:

    git 中的提交时间戳几乎完全是装饰性的——没有任何内部使用它们,但一些客户可能会使用时间来命令显示事物以提供帮助。因此,如果只是时间戳有问题,我鼓励您将其记下来以体验并继续前进。

    另一方面,如果您的分支上的提交结构确实存在问题,那么您遇到了更大的问题,并且您的问题没有足够的信息来诊断它。我的建议是创建一个新的克隆(可能使用 --mirror)并使用gitk --all 检查它。您可能还想查看您的 reflog 以尝试确定您的提交应该是什么样的。希望你能弄清楚如何从你拥有的东西变成你想要的东西。

    【讨论】:

    • 另外,git log --topo-order 将强制输出为拓扑顺序(git log --graph 也是如此)。默认为“日期顺序”,通常不太容易混淆,但在这种情况下,会更容易混淆。
    • 这个i.imgur.com/oT6w1S3.png基本上就是这个样子。而且我在图中注意到,它创建了一个全新的开发,深入并在 8 月 16 日完成了这 2 次提交……然后“理智”开发从其他一些功能或其他东西分支出来……第一个在底部是我的提交,然后以下 2 是他的提交..
    • 听起来时间戳不是问题所在。假设他所构建的工作包括旧的自重定位提交,您可能只需要 rebase --onto(或 cherry-pick)将他的两个提交到您想要的分支上。恐怕您链接到的图像中并没有任何有用的信息。不管你做什么,备份并在一个新的克隆上做你的工作,这样你知道你不会丢失任何数据。
    • 好的,这个怎么样?这更有帮助吗..? i.imgur.com/KrSBMNs.png 在我进行合并后,底部的 2 个提交应该在顶部继续向上。中间线应该是开发线,因为我将它合并到我的功能分支中。
    • 这更有用:)。我认为这个问题可能纯粹是表面上的——如果你经常将开发合并到你的特性分支中,那么这似乎就是这里发生的事情。它看起来不同,因为时间戳使您的可视化以不同的顺序放置提交,但提交之间的行仍然在正确的位置。如果您愿意,您可以使用不同的时间戳重写这些提交,但这导致其他所有人都遇到分歧分支的问题。
    猜你喜欢
    • 2016-10-07
    • 2016-07-12
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2012-05-01
    相关资源
    最近更新 更多