为什么git(bash)在我的新文件中插入了一堆废话?

时间:2013-01-24 21:28:39

标签: git github git-bash

因此。我在git存储库中添加了一些新文件,这些文件在几个月内我没有碰过。对于某种原因,在合并,拉动并将我的更改推送到github之后,我注意到所有新文件都将文本插入其中,如下所示:

>>>>>>>>
HEAD
c0d3234k2jl423;lk4j232;l34jk32;l23j4

那些种类的行在整个新添加的文件中随机插入,但可能并非完全随机。幸运的是,没有太多的新文件,我能够通过,相当容易地清理它们,然后重新添加/提交/推送,现在我相信问题已经在我身后。

但是发生了什么?我对git和github还很新。我怎样才能避免将来发生这种情况?我在Windows XP上使用git bash控制台。

另外 - 因为这可能是相关的 - 当我尝试通过我的PHPStorm CLI界面提前提交文件时,我会点击“提交”并且提交永远不会完成。只是不断尝试和尝试。所以我不得不中止该命令,然后进入并手动删除index.lock文件,以及COMMIT_EDITMSG.swp文件。

另外,这次最后一次(当插入废话时),我收到一条错误消息,上面写着

E138: can't write viminfo file u:_viminfo!
Press enter or type command to continue

也许那也是相关的?就像我说的那样,问题似乎已经落后于我,只是想知道出了什么问题以及将来如何避免它。

2 个答案:

答案 0 :(得分:2)

评论太长了,所以:

如果您进行了一些提交并且远程具有不同的提交,则总是必须合并(或执行某些)。您只能推送它只会导致 在远程已有的基础上添加新提交。 (这被称为“快进”。)

只有你,所以遥控器不应该有不同的提交。但是,如果你在不了解你正在做的事情的情况下一直在推动诸如rebase之类的恶作剧或强迫推动,那么你可能已经创造了将一个分支合并到自身中的令人愉快的荒谬情况。

所以,这是一个速成课程,其中一个你会学会讨厌的提交图表:

         H <- merge
        / \
you -> G   E <- github
       |   |
       F   D
        \ /
         C
         |
         B
         |
         A

这就是提交历史记录可能看起来如果你做到了C,然后其他人(或你在另一台计算机上)添加了D和E并推送它们,然后你又开始从C工作并做了F和G你不能这样推,因为你的当地分支机构对DE或者它们与历史的关系知之甚少;你只有A-B-C-F-G

但是如果你先合并创建H,你现在有了一个分支,其中所有来自你和github的提交,而github只能通过“移动”来更新它的箭头向上。您无法在远程工作上执行此操作,因为它涉及更改文件以创建合并版本,并且远程计算机实际上没有文件的物理副本。 (另外,你无法解决冲突。)

git log --graph --oneline --decorate是一个非常有用的视图 告诉你你正在合并什么。上面的图表将会出来 像这样:

* H (master)
|\
*| G
*| F
|* E (origin/master)
|* D
|/
* C
* B
* A

git将告诉您合并后是否存在冲突,而git status(您应该虔诚地)将始终以可怕的红色显示冲突的文件。当发生这种情况时,git几乎肯定会在这些文件中注入冲突标记,您需要解决问题并完成合并。 (当它告诉你存在冲突时,git会告诉你如何完成合并。)

如果冲突标记之间的内容确实是垃圾,那么IDE可能会搞砸并损坏文件。 git非常可靠,不应该破坏数据(当然,除非你无意中要求它)。

答案 1 :(得分:1)

下次尝试使用工具解决冲突,例如git mergetool -t kdiff3。这是相当快速和直观的,当有大量的小冲突时帮助很多。

kdiff3的视觉instructions