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

标签 git github git-bash

所以。我将一些新文件添加到 git 存储库中,我已经几个月没有碰过它们了。出于某种原因,在 merge 、 pull 并将我的更改推送到 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

也许这也相关?就像我说的,这个问题现在似乎已经过去了,只是想知道出了什么问题以及将来如何避免它。

最佳答案

评论太长了,所以:

如果您进行了一些提交并且远程有不同的 提交,您总是必须 merge (或做某事)。只有当它会导致在远程已经拥有的内容之上添加新提交时,您才可以推送。 (这称为“快进”。)

只有你一个人,所以远程不应该有不同的提交。但是,如果您在不了解自己在做什么的情况下一直在使用 rebase 或强制推送等恶作剧,那么您可能已经创建了将分支 merge 到自身中的令人愉快的荒谬情况。

因此,这是一个速成类(class),其中包含您将学会讨厌的提交图表之一:

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

这就是提交历史可能的样子,如果你一直工作到 C,然后其他人(或你在另一台计算机上)添加了 D 和 E 并推送它们,然后你再次从 C 开始工作并做了 F 和 G . 你不能这样推送,因为你的本地分支不知道任何关于 DE 或者它们与历史的关系;你只有 A-B-C-F-G

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

git log --graph --oneline --decorate 是一个非常有用的 View ,应该 向您展示您正在 merge 的内容。上面的图会出来一看 像这样:

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

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

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

关于git - 为什么 git (bash) 会在我的新文件中插入一堆废话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511137/

相关文章:

github从提交历史中删除单个文件

github - 如何使每个 git 分支的 travis ci 构建失败图形不同

git - 在 Github Actions for PR 中获取 [not] 来自 fork 的目标分支引用

windows - 在 Windows 上,Git Bash vs Windows Powershell vs 命令提示符有什么区别

git - 如何更改多个提交的作者和提交者姓名/电子邮件?

git - 在启动时运行 git-instaweb

github - 将GitHub与Atlassian JIRA Studio集成与通过FishEye进行集成之间有何区别?

windows - Windows Git-bash运行docker.sock

linux - “vagrant up”在 Windows 上不起作用

git clone --bare 来自 ssh : objects folder empty