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?