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

Git merge left HEAD marks in my files

我尝试使用git合并命令行中的文件,这时出现一条错误消息,告诉我合并被中止。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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无法自动合并。您需要手动将这些部分编辑为您想要的部分,然后提交结果。

例如,在您的特定情况下,您可能希望像这样解决它(注意-右侧的箭头/文本只是我的注释,而不是您要在文件中键入的内容):

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

因此,您将文件另存为…

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


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

1
git mergetool

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

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

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

您可以使用:1:filename语法查看不同的版本。请参阅此处以获取解释。但所有这些都假定"git状态"显示文件需要合并。

最后,您始终可以选择:

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


所有答案都是正确的,但是如果您希望自动移动所有冲突标记,并且希望自动更改文件以保持头部,那么您可以创建自己的bash脚本,如下所示:

示例脚本:

# vim /usr/sbin/solve.git

(后面追加)

1
2
3
4
5
6
7
8
#!/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

江户十一〔一〕号

&只需在git repo/路径中运行它即可解决:

埃多克斯1〔2〕埃多克斯1〔3〕

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


我来自这个问题。我想要一些自动合并半个合并文件的方法,而不是手动编辑文件(如其他答案中建议的那样,我做起来并不太舒服)。下面是我通过netbeans做的,但也可以通过命令行来完成。

现在,请记住,只有在merge->add->commit之后,你意识到你搞砸了,想要重新经历这个过程,这才有效。

步骤1:重置为上一个提交。

1
git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

步骤2:重新尝试合并分支

1
git merge --ff origin/feature/YOUR-Branch_here

此时,如果您使用的是图形用户界面,则合并窗口将提示您。然后你可以正常进行。


在Atom中,我遇到了一些文件没有将解决的合并冲突保存到驱动器的问题,因此我不得不手动单击"保存"。我花了不少时间才弄明白。