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