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<<<<<<< HEAD
  • 更改后的代码行
  • 一串等号( =======
  • 新版本的代码
  • 另一行以大于符号和分支名称开头( >>>>>>> gh-pages

更糟糕的是,文件内容不再有序。 有谁知道我如何让这些文件恢复正常,我在gh分支中所做的更改合并到主分支?

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


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

 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状态会告诉你你在哪里。 之后,你有很多select。 您应该手动解决合并提交问题,这可能很具挑战性,或者使用以下工具:

 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 status'将文件显示为需要合并。

最后,你总是可以select:

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

所有的答案是正确的,但如果你想自动删除所有冲突标记,并希望自动更改文件,以保持HEAD,那么你可以创build自己的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 /path中运行即可解决:

$ cd <path_to_repo>
$ solve.git

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