Git 如何比较本地更改和远程存储库之间的更改

Git 如何比较本地更改和远程存储库之间的更改,git,github,egit,github-api,jgit,Git,Github,Egit,Github Api,Jgit,我想使用Java中的GitAPI(Egit和JGit)与远程Git存储库(位于GitHub)同步更改。我该怎么做?这是通过知道两个版本之间的头ID实现的,还是通过其他方式实现的?仅仅知道两个存储库中每个存储库的头就足以告诉您它们是否不同步,但还不足以告诉您哪一个在另一个之前。在一般情况下,不止一个人可以推送到存储库,因此假设本地存储库总是在远程存储库之前是不明智的。您必须使用API来查找第一个公共SHA,并使用它来确定如何处理同步存储库。您必须处理三个(实际上更多)案例: 您的本地分支位于远程分

我想使用Java中的GitAPI(Egit和JGit)与远程Git存储库(位于GitHub)同步更改。我该怎么做?这是通过知道两个版本之间的头ID实现的,还是通过其他方式实现的?

仅仅知道两个存储库中每个存储库的
头就足以告诉您它们是否不同步,但还不足以告诉您哪一个在另一个之前。在一般情况下,不止一个人可以推送到存储库,因此假设本地存储库总是在远程存储库之前是不明智的。您必须使用API来查找第一个公共SHA,并使用它来确定如何处理同步存储库。您必须处理三个(实际上更多)案例:

  • 您的本地分支位于远程分支之前
  • 你的遥控器在你的本地计算机之前
  • 您的本地和远程都有一组提交,但另一台计算机上没有,例如,您从一台计算机上推送,但没有拉到这里,或者其他人最近推送了提交,但您没有注意到,等等
  • 前两种情况微不足道,第三种情况要复杂得多。在将本地更改与远程更改同步之前,您必须始终进行拉取操作,拉取操作可能会导致合并冲突。如果不小心,可能会在发生冲突时尝试强制提交,从而破坏某些代码


    如果不知道您计划做什么或您的确切用例是什么,我就不能给您比这更多的帮助。我希望这足够了。:-)

    感谢您描述所有这三种情况。我可以在工作时处理它。但是在我的应用程序中,有一个“计划刷新”功能,该功能在假设远程总是在本地之前工作(如您在第二种情况中所述),并使用远程存储库刷新自身(即使用远程存储库的最新状态替换自身)。这就是我想在Java中使用Git Api实现的。请建议如何实现。坦率地说,我不熟悉Java Api,但我建议不要实现这一点。我只能猜测,这将引起比它将帮助你多得多的头痛。如果您只是开始使用更好的git实践,您会发现您从来都不需要它。这与这个问题无关,但请随时给我发电子邮件了解更多细节。好的,但是你可以建议使用git bash中的命令,只需知道头部ID即可。我会找到与该命令等效的Java代码。