pat*_*shi 5 git github git-bash
所以。我向 git 存储库添加了一些我已经几个月没有接触过的新文件。出于某种原因,在合并、拉取并将我的更改推送到 github 之后,我注意到所有新文件都像这样插入了文本:
>>>>>>>>
HEAD
c0d3234k2jl423;lk4j232;l34jk32;l23j4
Run Code Online (Sandbox Code Playgroud)
在新添加的文件中,这些类型的行是随机插入的,但可能不是完全随机的。幸运的是,没有太多新文件,我能够通过,相当容易地清理它们,然后重新添加/提交/推送,现在我相信问题已经解决了。
但是发生了什么?我对 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
Run Code Online (Sandbox Code Playgroud)
也许这也有关系?就像我说的,这个问题现在似乎已经过去了,只是想知道出了什么问题以及将来如何避免它。
对于评论来说这太长了,所以:
如果您进行了一些提交并且远程有不同的提交,您总是必须合并(或执行某些操作) 。仅当推送会导致仅在远程已有内容的基础上添加新提交时,您才可以推送。(这称为“快进”。)
只有你一个人,所以远程不应该有不同的提交。但如果你一直在搞恶作剧rebase
或者强行推动而不理解你在做什么,你可能会创造出将分支合并到自身中的令人愉快的荒谬情况。
所以,这里有一个速成课程,其中包含您将讨厌的提交图表之一:
H <- merge
/ \
you -> G E <- github
| |
F D
\ /
C
|
B
|
A
Run Code Online (Sandbox Code Playgroud)
如果您一直工作到 C,然后其他人(或另一台计算机上的您)添加了 D 和 E 并推送它们,然后您再次从 C 开始工作并执行了 F 和 G,那么提交历史记录可能会是什么样子。您可以不要这样推动,因为您当地的分支机构不了解任何有关历史的D
信息E
,也不了解它们与历史的关系;你只有A-B-C-F-G
。
但是如果你先合并到 create H
,你现在就有了一个分支,上面有你和 github 的所有提交,并且 github 可以通过向上“移动”箭头来更新。您无法在远程执行此工作,因为它涉及更改文件以创建合并版本,并且远程计算机实际上没有文件的物理副本。(另外,你无法解决冲突。)
git log --graph --oneline --decorate
是一个非常有用的视图,应该向您展示您正在合并的内容。上图将如下所示:
* H (master)
|\
*| G
*| F
|* E (origin/master)
|* D
|/
* C
* B
* A
Run Code Online (Sandbox Code Playgroud)
git 会告诉您合并后是否存在冲突,并且git status
(您应该虔诚地运行)将始终以可怕的红色显示冲突的文件。发生这种情况时,几乎可以肯定 git 已将冲突标记注入到这些文件中,您需要解决问题并完成合并。(当 git 告诉你存在冲突时,它会告诉你如何完成合并。)
如果冲突标记之间的内容确实是垃圾,则可能是您的 IDE 搞砸了并损坏了文件。git 非常可靠,永远不应该破坏数据(当然,除非你无意中要求它这样做)。
归档时间: |
|
查看次数: |
1726 次 |
最近记录: |