【问题标题】:How can I clean up a broken history with git-tfs如何使用 git-tfs 清理损坏的历史记录
【发布时间】:2013-06-21 05:10:59
【问题描述】:

我不确定我是如何进入这种状态的 (*),但我的 tfs/default 远程分支中有一些提交在 TFS 中不存在,所以我想摆脱它们.所以我的历史是这样的:

A--B--C--D tfs/default

... 但是提交 B 和 C 实际上并不是 TFS 中的变更集。结果,当我签出 tfs/default 时,由于提交 B 和 C,我与 TFS 不同步。不好。

我想如果我能以某种方式将 tfs/default 远程重置为 A 并执行另一个“git tfs fetch”以得到实际的历史记录,我可以修复它:

A--D tfs/default

但我不知道该怎么做?


*) 如果有什么不同,我认为它涉及在 B 和 C 上使用“git tfs shelve”,可能之后是一些提交和“git tfs pull”。但我不确定。

【问题讨论】:

    标签: git git-tfs


    【解决方案1】:

    是的,你已经得到了一半的答案!您应该将tfs/default 重置为上一步并获取。在 git 中没有办法做到这一点(如果我知道的话),因为这不是一个正常的情况,但我们仍然可以通过编辑 git 文件来做到这一点......这很容易!

    如果您确定不想保留 BC 提交(否则通过创建本地分支将它们临时保存),只需执行以下操作:

    • 进入您的.git 文件夹并查找文件/refs/remotes/tfs/default
    • 编辑文件,将文件中的sha替换为commitA的sha
    • 从 tfs 获取

    那应该很好!

    编辑:也可以使用命令行git update-ref tfs/default SHAofcommitA

    【讨论】:

    • 嗯,git reset --hard SHAofcommitA && git fetch 还不够吗?据我所知,这是正确的方法。
    • 不,我不认为是因为他想移动由 git-tfs 管理的远程而不是 git 分支...
    • 但是git rev-update tfs/default SHAofcommitA 会起作用的
    • @Phillipe:我想你的意思是git update-ref tfs/default $SHA1。 rev-update 不是 git 命令。是的 - update-ref 是编辑 ref 文件的正确方法。
    猜你喜欢
    • 2017-12-09
    • 2023-03-23
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2016-10-10
    相关资源
    最近更新 更多