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。