为什么git(Bash)要在我的新文件中插入一堆无稽之谈? [英] Why did git (bash) insert a bunch of nonsense into my new files?
问题描述
所以。我向一个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屋!