我尝试使用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-branch中所做的更改合并到主分支?
答案 0 :(得分:83)
那些是conflict markers。你还在合并的过程中,但有些部分Git无法自动合并。您将need to hand-edit those parts发送到您想要的内容,然后提交结果。
例如,在您的特定情况下,您可能希望像这样解决它(注意 - 右侧的箭头/文本只是我的注释,而不是您在文件中键入的内容):
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(""); }
答案 1 :(得分:21)
绝对以'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语法查看不同的版本。有关说明,请参阅here。但所有上述假设'git status'将文件显示为需要合并。
最后,您始终可以选择:
git reset --hard # sounds like --hard is what you need but check other options
答案 2 :(得分:1)
所有答案都是正确的,但如果您想要自动移除所有冲突标记&amp;想要自动更新文件以保持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仓库/路径中运行它即可解决:
$ cd <path_to_repo>
$ solve.git
注意: - 上面提到的文件扩展名是php,css,js,html,svg&amp;文本。
答案 3 :(得分:0)
在Atom中我遇到的问题是某些文件没有将已解决的合并冲突保存到驱动器,因此我不得不手动点击&#34; save&#34;。 我花了很长时间才弄明白。
答案 4 :(得分:0)
我来自this question。我想要一种自动化的方法来合并半合并的文件,而不是手动编辑文件(,正如其他答案中所建议的那样,我做起来并不舒服)。因此,这就是我最终通过netbeans完成的操作,但是也可以通过命令行完成。
现在,请记住,只有在merge->add->commit
之后,您意识到自己搞砸了,并想重新执行该过程时,此方法才有效。
步骤1:重置为上一次提交。
git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e
步骤2:重新尝试合并分支
git merge --ff origin/feature/YOUR-Branch_here
这时,如果您正在使用GUI,则将在合并窗口中提示您。然后您就可以照常进行了。