首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LibGit2Sharp编辑旧提交消息

使用LibGit2Sharp编辑旧提交消息
EN

Stack Overflow用户
提问于 2015-11-10 22:20:45
回答 1查看 658关注 0票数 0

是否可以使用libgit2sharp编辑不是最新提交的提交消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-11 00:23:00

git filter-branch的类比是Repository.Refs.RewriteHistory

例如,让我们通过用foo替换foo来重写包含StackoverFlow的所有提交消息。

代码语言:javascript
复制
repo.Refs.RewriteHistory (new RewriteHistoryOptions {
    OnError = OnError, 
    OnSucceeding = OnSucceeding,
    CommitHeaderRewriter = c =>
    CommitRewriteInfo.From (c, c.Message.Replace ("foo", "StackOverflow")),
}, commitsToRewrite);   

预重写:

代码语言:javascript
复制
git log --oneline
b859690 Commit foo 3
327f702 Commit foo 2
75ac0b8 Commit foo 1

Post-rewrite:

代码语言:javascript
复制
git log --oneline
dc156e3 Commit StackOverflow 3
587f6c3 Commit StackOverflow 2
894361f Commit StackOverflow 1

注意:正如您将在上面的日志输出中看到的那样,SHAs已经改变了,就像它们通过git filter-branch进行的那样,您将不得不强制向远程服务器推送.

我强烈建议查看测试夹具FilterBranchFixture.cs,因为这是RewriteHistory的最好文档,您将发现不同的重写类,比如重写提交的父级、在这里使用以及如何处理错误.

警告!重写的历史记录将对所有对象都有不同的对象名称,并且不会与原始分支收敛。您将无法轻松地在原始分支之上推送和分发重写的分支。如果您不知道该命令的全部含义,请不要使用此命令,如果一个简单的提交就足以解决您的问题,请避免使用它。(有关重写已发布历史的进一步信息,请参阅git-rebase(1)中的“从上游重基中恢复”一节。)

剪切/粘贴示例:

代码语言:javascript
复制
using System;
using LibGit2Sharp;

namespace gitrewrite
{

    class MainClass
    {
        private static bool succeeding;
        private static Exception error;

        public static void Main (string[] args)
        {
            var repo = new Repository ("/Users/sushi/code/XamTests/RepoTestBed");

            // Assuming you might pre-filter, but for this example take ALL commits
            var commitsToRewrite = repo.Commits;

            repo.Refs.RewriteHistory (new RewriteHistoryOptions {
                OnError = OnError, 
                OnSucceeding = OnSucceeding,
                CommitHeaderRewriter = c =>
                    CommitRewriteInfo.From (c, c.Message.Replace ("foo", "StackOverflow")),
            }, commitsToRewrite);   
        }

        private static Action OnSucceeding {
            get {
                succeeding = false;
                return () => succeeding = true;
            }
        }

        private static Action<Exception> OnError {
            get {
                error = null;
                return ex => error = ex;
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33640779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档