如何在GIT中自动修复我的大师分支中的狐步舞合并? [英] How to automatically fix foxtrot-merges in my the 'master' branch in git?

查看:17
本文介绍了如何在GIT中自动修复我的大师分支中的狐步舞合并?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

狐步舞合并问题在this question中有详细说明。简而言之:当在相同的分支(远程和本地)上工作时,简单的git merge命令会隐藏第二个父级下的远程合并提交,并替换远程的第一个父级的历史记录(在常规情况下-&;起源&)。我们认为这很糟糕。

上面链接的问题询问检测此情况并拒绝推送的方法。我的问题是如何自动修复

我不太真的关心完整树历史的整齐,但我希望第一代父母树将是完美的。而且重要的是不要打扰其他用户,所以问题应该会自动解决。

目标:当Git源钩子检测到Foxtrot Commit推送时,它将在旧Head和New-Head之上添加另一个Merge-Commit,将旧Head作为第一父。

实现这一目标的最安全方法是什么?

推荐答案

根据the mentioned above questionthis question(在裸回购中合并)的答案,我得出了以下解决方案。

此脚本应放入post-receive挂钩文件中。根据请求,该脚本创建了不隐藏旧标题的new-merge-Commit。

脚本还:

  1. 收集新Head的第一个父行的所有Commit-msg,并将其设置为new-Merge-Commit消息。
  2. 将新合并提交的作者和提交者伪装为新标题的作者(同时处理&或‘in the name)的大小写。

命令说明:

  1. git read-tree命令转移新头提交的确切内容。New-merge-Commit应该具有完全相同的内容。
  2. git log命令收集所需的提交消息。
  3. git ... commit-tree命令使用作者姓名/电子邮件、暂存数据、两个父项和组合提交消息创建新的-merge-Commit。
  4. git update-ref命令将相关引用(在本例中为-master)更新为指向new-merge-Commit。

如果这个脚本有问题,如果您能发现它们,我们将不胜感激。:)

脚本:

#!/bin/sh

while read oldrev newrev refname
do
if [ "$refname" = "refs/heads/master" ]; then
    echo "Fix Foxtrot-Merges Hook..."
    MATCH=`git log --first-parent --pretty='%H %P' $oldrev..$newrev | grep $oldrev | awk '{ print $2 }'`
    if [ "$oldrev" = "$MATCH" ]; then
        echo "...All is OK"
    else
        echo "...Fixing"
        
        authorName=`git log --first-parent --pretty='%an' $newrev^..$newrev`
        authorEmail=`git log --first-parent --pretty='%ae' $newrev^..$newrev`
        
        authorName=${authorName//"/\"}
        authorEmail=${authorEmail//"/\"}
        
        git read-tree -i --reset $newrev
        
        git log --first-parent --pretty='%B' $oldrev..$newrev > COMMIT_EDITMSG
        
        newCommitHash=$(git -c user.name="$authorName" -c user.email="$authorEmail" commit-tree $(git write-tree) -p $oldrev -p $newrev < COMMIT_EDITMSG)
        
        git update-ref $refname $newCommitHash
    fi
fi
done

这篇关于如何在GIT中自动修复我的大师分支中的狐步舞合并?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆