Git在我的文件中将HEAD标记合并

我尝试使用Git在命令行中合并文件,当出现错误消息告诉我合并被中止时。

我认为这是结束,但后来我意识到我的文件中有gitmarks。 像这样:

start =
    expression

validchar = 
    [0-9a-zA-Z_?!+-=@#$%^&*/.]

integer = 
<<<<<<< HEAD
    digits:[0-9]+
        { return digits.join(""); }
=======
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages

这些文件不是由我编辑的,并且显示的行中插入了:

  • 小于标志后的头( <<<<<<< HEAD
  • 更改后的代码行
  • 一串等号( =======
  • 新版本的代码
  • 另一行以大于符号和分支名称开头( >>>>>>> gh-pages
  • 更糟糕的是,文件内容不再有序。 有谁知道我如何让这些文件恢复正常,并且我在gh分支中所做的更改合并到主分支中?


    那些是冲突标记。 您仍然处于合并过程中,但有一些Git无法自动合并的部分。 您需要手动将这些部分编辑为您想要的部分,然后提交结果。


    例如,在你的特定情况下,你可能想要像这样解决它(注意 - 右边的箭头/文本只是我的笔记,而不是你要输入到文件中的东西):

    integer = 
    <<<<<<< HEAD                                  <-+ remove the bits here
        digits:[0-9]+                               |
            { return digits.join(""); }             |
    =======                                       <-+
        sign:"-"* digits:[0-9]+
            { return sign + digits.join(""); }
    >>>>>>> gh-pages                              <-- and this
    

    因此您将该文件保存为...

    integer = 
        sign:"-"* digits:[0-9]+
            { return sign + digits.join(""); }
    

    绝对以'git status'开始,看看你有什么。 如果您中止了合并(或中止了合并),并且在工作目录中存在冲突的文件,那么出现了问题。 Git状态会告诉你你在哪里。 之后,你有很多选择。 您应该手动解决合并提交问题,这可能很具挑战性,或者使用以下工具:

    git mergetool
    

    如果您的文件列为需要合并,合并工具将工作。

    您还可以执行以下操作之一:

    git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
    git checkout --theirs -- /path/to/conflicted-file
    

    您可以使用:1:filename语法查看不同的版本。 看到这里的解释。 但上述所有假设'git状态'显示文件需要合并。

    最后,你总是可以选择:

    git reset --hard   # sounds like --hard is what you need but check other options
    

    所有的答案都是正确的,但如果你想自动删除所有冲突标记并想自动更新文件以保持HEAD,那么你可以创建自己的bash脚本,如: -

    示例脚本:

    # vim /usr/sbin/solve.git

    (追加以下)

    #!/bin/bash
    for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
    do
    sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
    sed -i -e '/^>>>>>>> /d' $f
    echo "$f Fixed"
    done
    git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify
    

    # chmod 755 /usr/sbin/solve.git

    只需在您的GIT repo /路径中运行即可解决:

    $ cd <path_to_repo>
    $ solve.git

    注意: - 上面提到的文件扩展名是php,css,js,html,svg和txt。

    链接地址: http://www.djcxy.com/p/41715.html

    上一篇: Git merge left HEAD marks in my files

    下一篇: How do I finish the merge after resolving my merge conflicts?