Git:这种分叉是怎么发生的?

时间:2016-11-09 17:13:00

标签: git commit git-branch git-history-graph

情况

  • 我有一个当地的Git回购。

enter image description here

  • 我只在分支上: master

  • 我曾经有另一个分支,但我将其合并到master然后将其删除。

  • 此类合并和删​​除的分支从fe6263e分叉。

  • 0c81926c79dc19

  • 的 - 。
  • 没有标记或任何其他指向c79dc19的提交。我理解,如果某个对象指向一个修改后的提交,这样的提交将继续显示在历史中。但事实并非如此。

问题

  • 为什么历史记录线没有被夷为平地?

  • 为什么仍然显示c79dc19

  • 它是如何发生的?

正如我所提到的,没有任何内容指向它,我做了git -gc来清理任何挂起的提交。

3 个答案:

答案 0 :(得分:2)

  

没有标记或任何其他[commit]指向c79dc19

这不是历史所显示的。

尝试运行git show HEAD - 它会显示合并的两个父母是什么。它从您的图表中看起来像是c79dc19,这就是它出现在您的历史中的原因。

最有可能的是,分支真正开始于c79dc19(因此已经在主服务器上),或者分支在{{1}时被合并为主服务器作为快进是它的头。

工作插图:

  1. 初始状态

    c79dc19
  2. 新提交

    fe62 <=master <=HEAD
    
  3. 结帐新分行

    fe62 <- c79d <=master <=HEAD
    
  4. 修改(在分支上)提供一个新的提交fe62 <- c79d <=master <=branch <=HEAD 替换该分支上的 0c81,但更改{ {1}}

    c79d

答案 1 :(得分:2)

你在c79创建了一个新的分支,所以主人继续指向那里。然后从新的分支机构你提交修改,因此主人和新分支有不同的历史。

有一点需要注意的是,修正案实际上并未修改提交。提交是不可改变的。修正案基于另一个修改创建新的提交。

如果要展平它,请将master指向上一次提交并合并到tip。

git checkout -b temp
git branch -f master fe6263e
git checkout master
git merge f6429eb

答案 2 :(得分:1)

很难100%确定,但这种情况经常发生,因此可能正确答案。

您提到您只有一个名为master的分支。我相信你!但是你不只有一个存储库 - 或者更确切地说,你有你的克隆,然后还有一些其他克隆,可能在你在某个中心调用origin的遥控器上服务器,如GitHub或企业服务器。您将提交发送到服务器,并从服务器获取提交。

您还提到使用git commit --amend。有关详细信息,请参阅How does git commit --amend work, exactly?(如Jubobs' comment中所述),但简而言之,这并不是更改提交,只是将其推到一边赞成新的替换提交。但是,据推测,您已经推送了原始提交 - 所以它现在位于其他存储库中的master分支中。

所以你现在0c81926作为master的提示,而他们(来源)有c79dc19。然后,您创建了新的提交f6429eb,以便您的master指向该提交。

然后,我敢打赌你已经git pull了(很可能你没有配置或指示你的git pullgit rebase)。这次运行git fetch后跟git mergegit fetch已使用您的远程origin进行了检查,发现 master指向了提交c79dc19git merge git pull您的分支合并 分支的706b1ef生成合并提交c79dc19

最后,这意味着你做了有两个不同的分支:master和master。只是其中一个是你的主人,其中一个是其他人主人。

请注意,您可以摆脱提交git rebase -i fe6263e 合并,例如,使用git rebase(混乱开始之前的那一点):删除不需要的额外提交,让origin展平剩余的历史记录并省略合并。 (或者,使用Jeff Puckett II's answer中的方法。)但是,执行此操作后,您的历史记录将与c79dc19上的历史记录不同:他们有一个提交(同样的) master你正在试图摆脱)你没有。因此,您无法在不强制推送的情况下进行推送(可选地,&#34;强制使用租约&#34;,期望他们的c79dc19 id name pluralName 1 4bf58dd8d48988d1c1941735 Mexican Restaurant Mexican Restaurants shortName icon.prefix 1 Mexican https://ss3.4sqi.net/img/categories_v2/food/mexican_ icon.suffix primary 1 .png TRUE [[14]] **data frame with 0 columns and 0 rows** [[15]] id name pluralName shortName 1 4bf58dd8d48988d11b951735 Flower Shop Flower Shops Flower Shop icon.prefix icon.suffix 1 https://ss3.4sqi.net/img/categories_v2/shops/flowershop_ .png primary 1 TRUE ,以确保他们没有自上次检查以来,我得到了更多的提交。