如何让单个用户在git中导致冲突?

时间:2015-12-17 10:06:23

标签: git

我正在使用远程git存储库,我是唯一一个提交到该存储库的人,并且只进入master - 也就是说,没有分支,没有合并。

大部分时间都可以。

但有时候,当我尝试提交和推送时,我会得到一些奇怪的“快速拒绝”消息。然后,我试图通过运行git pull来同步,我将本地副本变为冲突状态:(

上次它损坏了我的一个二进制文件。

知道一个用户进入冲突状态会怎么样?

2 个答案:

答案 0 :(得分:1)

使用git fetch; gitk HEAD...@{u}(或git fetch; git log --graph --decorate --oneline HEAD...@{u})查看正在发生的事情。

只要您的本地分支机构和您的上游分支机构不转移,一切都应该没问题。如果他们转移,请检查负责的提交类型。

还要确保git status --short始终显示干净状态。如果有未提交的更改,可能会让您遇到类似问题。

答案 1 :(得分:0)

  

即没有分支,没有合并

这根本不是真的。你已经分支了,而且你正在合并。这是怎么回事:

  1. 您实际使用的存储库至少有两个克隆。

    A --- B --- C <-- repo1:master
                ^
                |
           repo2:master
    

    两个存储库都有一个master分支,通常指向同一个提交。

  2. 您在一个克隆(提交D)中做了一些工作,将更改推送到您的中央存储库。

    A --- B --- C --- D <-- repo1:master
                ^
                |
           repo2:master
    
  3. 您在其他克隆中做了一些其他工作(提交E)而没有先提取您的第一个更改。在这一点上,无论你是否意识到,你的历史都会分化。是的,两个分支都称为master,但它们位于不同的存储库中,因此它们可以分歧。

    A --- B --- C --- D <-- repo1:master
                 \
                  \-- E <-- repo2:master
    
  4. 您尝试将E推送到已包含D的存储库(master指向该提交)。这是git意识到您的历史已经分歧并因此中止推送操作的点。这是因为git看到您要推送到的存储库中的master不是您尝试推送的master的父级。这就是non-fast-forward rejected

  5. 的含义
  6. 您从其他存储库中获取了D,并开始合并,尝试创建合并提交Fgit pull结合了这两个操作)。由于D将是新提交F的父级,因此将F推送到repo1会成功,但必须先创建它。由于您的两个分支机构的更改存在冲突,git会要求您修复它们。

    A --- B --- C --- D <-- repo1:master
                 \     \
                  E --- F <-- repo2:master
    
  7. 正如michas所说,git log --oneline --decorate --graph --all是理解存储库状态的好方法。经常使用此命令。我强烈建议为它做一个别名。