【问题标题】:How to execute "git reset --hard" in libgit2sharp如何在 libgit2sharp 中执行“git reset --hard”
【发布时间】:2022-06-30 16:57:32
【问题描述】:

Libgit2sharp 有很大的潜力,但是在常规 git 中非常简单的一些东西在库中复制起来绝对是一团糟

git reset --hard

就是其中之一。一个简单的 3 字命令,在 Libgit2sharp 中没有真正的等价物,因为那里的重置命令至少需要您要重置的提交,“真正的”git reset --hard 自动收集的东西

【问题讨论】:

    标签: c# git libgit2sharp


    【解决方案1】:

    以下代码尽可能接近地复制常规命令行 ````git reset --hard```。它动态查找我们要重置的跟踪上游分支,然后找到两个分支分歧的“基础”提交,然后重置为那个。

    花了我几天的时间和很多错误(其中一些只出现在非常特定的设置中,当我一开始对上游分支名称进行硬编码时)

            {
                try {
                    using (var repo = new Repository(localRepoPath))
                    {
                        var trackedBranch = repo.Head.TrackedBranch;
    
                        Commit originHeadCommit = repo.ObjectDatabase.FindMergeBase(repo.Branches[trackedBranch.FriendlyName].Tip, repo.Head.Tip);
                        repo.Reset(LibGit2Sharp.ResetMode.Hard, originHeadCommit);
                    }       
                }catch(Exception e)
                {
                    System.Diagnostics.Trace.TraceError("Error when resetting the local GIT repo, a git pull will be attempted next: " + e.Message + " \b" + e.StackTrace);
                    return false;
                }
                return true;
            }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-13
      • 2011-02-09
      • 2013-01-17
      • 2011-08-12
      • 2010-09-05
      相关资源
      最近更新 更多