为什么git(Bash)要在我的新文件中插入一堆无稽之谈? [英] Why did git (bash) insert a bunch of nonsense into my new files?

查看:15
本文介绍了为什么git(Bash)要在我的新文件中插入一堆无稽之谈?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以。我向一个git存储库添加了一些几个月没碰过的新文件。由于某些原因,在将我的更改合并、拉入和推送到GitHub后,我注意到所有新文件都插入了文本,如下所示:

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

这些行在新添加的文件中是随机插入的,但可能不是完全随机插入的。幸运的是,没有太多的新文件,我能够很容易地浏览、清理它们,然后重新添加/提交/推送,现在我相信问题已经过去了。

但这是怎么回事?我对Git和GitHub还是个新手。我如何才能避免这种情况在未来发生?我在Windows XP上使用的是Git bash控制台。

另外--因为这可能是相关的--当我尝试早先通过PHPStorm CLI界面提交文件时,我会点击"Commit",而提交永远不会完成。只是不停地尝试。因此,我不得不中止该命令,然后进入并手动删除index.lock文件和COMMIT_EDITMSG.swp文件。

另外,最后一次(插入胡言乱语时),我收到一条错误消息:

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

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

推荐答案

评论太长,因此:

如果您进行了一些提交,而远程有不同的提交,则始终必须合并(或执行某项)。仅当推送会导致在遥控器已有的基础上添加新提交时才能推送。(这称为"快进"。)

只有您,所以遥控器不应该有不同的提交。但是,如果您一直在搞rebase这样的恶作剧,或者在不知道自己在做什么的情况下强行推送,您可能已经创造了将分支合并到自身中的令人愉快的荒谬情况。

因此,这里有一个速成课程,其中一个提交图是您将学会讨厌的:

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

这就是提交历史记录可能是这样的,如果您一直工作到C,然后其他人(或您在另一台计算机上)添加D和E并推送它们,然后您再次从C开始工作,并推送F和G。您不能这样推送,因为您当地的分支机构不了解<[2-1]和E,也不知道它们与历史记录的关系;您只有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非常可靠,应该永远不会销毁数据(当然,除非您无意中要求它销毁数据)。

这篇关于为什么git(Bash)要在我的新文件中插入一堆无稽之谈?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆