git如何比较远程分支差异以推动更改

git如何比较远程分支差异以推动更改,git,github,Git,Github,所以,我对这种情况有一个, 本地和远程存储库都有此图: A <-- B <-- C (master) \ \ D (feature) 然后,git状态如下所示: A <-- B <-- C <-- E (master) On branch feature Your branch and 'origin/payment-app' have diverged, and have

所以,我对这种情况有一个,

本地和远程存储库都有此图:

A <-- B <-- C  (master)
             \
              \
               D  (feature)
然后,
git状态
如下所示:

A <-- B <-- C <-- E (master)
On branch feature
Your branch and 'origin/payment-app' have diverged,
and have 4 and 3 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)

nothing to commit, working directory clean
注意:上面的错误是我从真实场景中得到的原始错误

所以我现在的问题是,

  • 到底是什么导致了这种行为
  • 我怎样才能解决这个问题?我尝试过做
    git pull
    ,但现在我得到了重复提交

  • 谢谢

    Git服务器将不接受推送,如果推送要求它们执行除快进合并以外的任何操作,以将您的更改带入。有两个选项最适合您,这主要取决于您的工作流:重设基础和合并

    现在的

    重基 Rebase将把当前提交作为一系列新提交重新播放到新的基础上(请参见下文),原始提交将在大约90天内挂起并被垃圾收集(如果使用标准配置选项)

    使用此方法,每次提交可能会引入需要解决的冲突,但通常这不是问题。如果发生冲突,请解决冲突并将其添加到,然后使用continue命令,有关详细信息,请参阅

    合并 如果您的工作流程允许,那么如果您有冲突,则合并会更容易处理,但它会使历史变得不那么干净(在重新基础和合并人群之间实际上存在一场圣战,因此这里没有任何意见)

    这将创建一个具有两个父级的新提交,即分支的您的版本和他们的版本

    总结
    使用这两种方法,您都可以将更改推送到github,因为它在到达github时将能够执行ff合并。

    您首先说图形有
    master
    指向您标识为
    C
    的提交,这让我感到困惑,然后说它有
    master
    指向提交
    E
    。我假设我在master上执行
    git pull
    ,这意味着我运行
    git checkout master;git pull
    但如果这是一个不正确的假设,这也很重要,请回答。遥控器上有一个挂起的PR。我不想使用D,将字母视为提交的线性计时。
    git log--oneline--graph--decoration master feature origin/payment app
    告诉我们这些分支之间的关系。如果
    origin/payment app
    feature
    的跟踪分支,
    git-rebase-master
    虽然有效,但似乎不是正确的步骤。一个更常见的工作流程是,您使用
    功能
    ,从远程
    支付应用程序
    拉入并推送到远程
    支付应用程序
    ,最后在
    支付应用程序
    符合条件时,将最新的
    功能
    支付应用程序
    合并到
    主程序
    。如果在
    功能的开发过程中,您不时地重新设置
    主控
    ,则历史记录会嵌套且不干净。我同意此工作流,但在更好地理解之前,我早就遇到了此问题。@Subomi.js听起来像是重写共享历史的案例,但我只想澄清一下,在我回答之前,我理解了事件的顺序。您从(C)开始对分支功能进行了3次提交,并将其作为原始/支付应用程序(D)推送到主应用程序。一个提交被添加到master(E)中,并且您希望通过将这三个提交重定到新的master head上来更新您的分支。这是正确的吗?您是私人回购协议的唯一开发商,还是远程分支机构是公共的?
    On branch feature
    Your branch and 'origin/payment-app' have diverged,
    and have 4 and 3 different commits each, respectively.
    (use "git pull" to merge the remote branch into yours)
    
    nothing to commit, working directory clean
    
    git checkout feature
    git rebase origin/feature
    
    git checkout feature
    git merge origin/feature