如何使用git-tfs清理已损坏的历史记录

如何使用git-tfs清理已损坏的历史记录,git,git-tfs,Git,Git Tfs,我不确定我是如何进入这种状态的(*),但我在我的tfs/default远程分支中有一些在tfs中不存在的提交,所以我想去掉它们。我的历史是这样的: A--B--C--D tfs/default 。。。但提交B和C实际上并不是TFS中的变更集。因此,当我签出tfs/default时,由于提交B和C,我与tfs不同步。不好 我想,如果我能够以某种方式将tfs/default remote重置为A,并执行另一次“git tfs fetch”以获得实际的历史记录,我就可以修复它: A--D tfs/d

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

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

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

A--D tfs/default
但我不知道该怎么做



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

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

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

  • 进入
    .git
    文件夹,查找文件
    /refs/remotes/tfs/default
  • 编辑文件并用提交的sha替换文件中的sha
    A
  • 从tfs获取
这应该很好


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

Hmm不仅仅是
git重置--hard SHAofcommitA和&git fetch
就足够了吗?据我所知,这是正确的方法。不,我不认为,因为他想移动一个由git tfs管理的远程设备,而不是git分支机构……但是,
git rev update tfs/default SHAofcommitA
会worked@Phillipe:我想你的意思是
git update ref tfs/default$SHA1
。revupdate不是git命令。是-更新ref是编辑ref文件的正确方法。