2012-08-02 84 views
2

我有Linux内核的混帐回购协议。我用标准的git clone创建了它。让我们打电话回购'服务器'。我也有'电脑'做了服务器的克隆。我在'计算机a'上开发很长一段时间,然后推回到'服务器',但总是在一个单独的分支。过了一段时间我想更新服务器,所以我跑了“计算机”下面确保git的历史是一样的

git checkout master 
git pull git://linus/kernel.git 
git push origin master #here origin is 'server' 

所以,现在我的服务器的主要分支可能在主不是来自主内核回购的变化。我如何找到他们,如果有的话?换句话说,我如何验证服务器/主机中的整个历史与Linus的主分支是否相同?

感谢

+0

当你“在一个单独的分支总是”说,没有你做你* *的发展在计算机A上在一个单独的分支,还是你在'master'的发展,然后* *推到服务器上的一个单独的分支? – 2012-08-02 20:55:22

+0

简单地比较两个主提交的提交哈希值('git的REV-parse'是你的朋友) – knittl 2012-08-02 20:55:23

+0

我做我的电脑上开发,但从来没有COMMITED上主。我从未在任何主分支上做过提交。至少我想。这就是我想要验证的。 (也许我在某些时候摘樱桃或合并?) – 2012-08-02 21:11:53

回答

1

的Git可以很容易地验证这两个分支的整个历史是一样的:

  • 如果SHA1提交的ID匹配,那么历史是相同
  • 其他,历史不同

git cherry命令可以帮助识别提交不要在上游分支,如果哈希值不同。

另一个提示是使用git pull --ff-only如果你从上游分支拉,并要确保与本地工作合并而不是完成。使用--ff-only后,SHA1提交ID将匹配,否则整个命令将失败。

+0

所以,如果在服务器/掌握最新的SHA1 ID最新莱纳斯/主相匹配,那么,无论是大师的整个历史是一样的吗?这意味着樱桃选择会改变提交的SHA1 ID。我从未注意过。 – 2012-08-02 21:15:29

+0

是的,这是完全正确的。 – 2012-08-02 21:16:27