我正在使用远程git存储库,我是唯一一个提交到该存储库的人,并且只进入master - 也就是说,没有分支,没有合并。
大部分时间都可以。
但有时候,当我尝试提交和推送时,我会得到一些奇怪的“快速拒绝”消息。然后,我试图通过运行git pull来同步,我将本地副本变为冲突状态:(
上次它损坏了我的一个二进制文件。
知道一个用户进入冲突状态会怎么样?
答案 0 :(得分:1)
使用git fetch; gitk HEAD...@{u}
(或git fetch; git log --graph --decorate --oneline HEAD...@{u}
)查看正在发生的事情。
只要您的本地分支机构和您的上游分支机构不转移,一切都应该没问题。如果他们转移,请检查负责的提交类型。
还要确保git status --short
始终显示干净状态。如果有未提交的更改,可能会让您遇到类似问题。
答案 1 :(得分:0)
即没有分支,没有合并
这根本不是真的。你已经分支了,而且你正在合并。这是怎么回事:
您实际使用的存储库至少有两个克隆。
A --- B --- C <-- repo1:master
^
|
repo2:master
两个存储库都有一个master
分支,通常指向同一个提交。
您在一个克隆(提交D
)中做了一些工作,将更改推送到您的中央存储库。
A --- B --- C --- D <-- repo1:master
^
|
repo2:master
您在其他克隆中做了一些其他工作(提交E
)而没有先提取您的第一个更改。在这一点上,无论你是否意识到,你的历史都会分化。是的,两个分支都称为master
,但它们位于不同的存储库中,因此它们可以分歧。
A --- B --- C --- D <-- repo1:master
\
\-- E <-- repo2:master
您尝试将E
推送到已包含D
的存储库(master
指向该提交)。这是git
意识到您的历史已经分歧并因此中止推送操作的点。这是因为git
看到您要推送到的存储库中的master
不是您尝试推送的master
的父级。这就是non-fast-forward rejected
。
您从其他存储库中获取了D
,并开始合并,尝试创建合并提交F
(git pull
结合了这两个操作)。由于D
将是新提交F
的父级,因此将F
推送到repo1
会成功,但必须先创建它。由于您的两个分支机构的更改存在冲突,git
会要求您修复它们。
A --- B --- C --- D <-- repo1:master
\ \
E --- F <-- repo2:master
正如michas所说,git log --oneline --decorate --graph --all
是理解存储库状态的好方法。经常使用此命令。我强烈建议为它做一个别名。