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脚本,如下所示:
示例脚本:
(后面追加)
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做的,但也可以通过命令行来完成。
现在,请记住,只有在
步骤1:重置为上一个提交。
1 | git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e |
。
步骤2:重新尝试合并分支
1 | git merge --ff origin/feature/YOUR-Branch_here |
此时,如果您使用的是图形用户界面,则合并窗口将提示您。然后你可以正常进行。
在Atom中,我遇到了一些文件没有将解决的合并冲突保存到驱动器的问题,因此我不得不手动单击"保存"。我花了不少时间才弄明白。