我知道这是一个基本问题。
完成发布后,我将master分支推向生产。
然后,我正在开发分支以添加新功能。
现在问题:
Q1:当我使用git push app-name-staging development:master
将开发分支推送到staging(在heroku上)时,我收到以下错误。为什么?如何解决?
! [rejected] development -> master (non-fast-forward)
error: failed to push some refs to 'git@heroku.com:app-name-staging.git'
Q2:在开发分支机构工作时,有人发现了一个错误。我切换到主分支,并修复错误。在不更改主分支的情况下,将主分支 中的错误修复合并到开发分支 的正确方法是什么?
感谢。
答案 0 :(得分:3)
以相反的顺序,因为2更简单:
git checkout dev
git merge master
就是这样。它根本不会改变主人。它只是将master上所做的所有更改合并到您的dev分支中。
另一方面,非快进错误告诉您,如果您的推送成功,那么您正在推送的分支中的提交会被覆盖。通常情况下,当两个人在同一个分支中工作时会发生这种情况。假设你和我都提交了A,我们都开始在同一个分支中工作。你创建提交B1,我创建B2。两者都有A作为他们的父母。假设你先推,所以现在远程分支有A --- B1。在当地,我有A --- B2。如果我要推动我的分支,那么A --- B2就是遥控器上的东西,所以你的提交将会丢失。这是我得到非快进错误的地方。解决此问题的正确方法是首先获取其他人在那里发布的更改,然后推送结果。在这个例子中,如果我拉,我最终得到:
C
/ \
B1 B2
\ /
A
具体来说,git首先抓住你的B1,这是A的孩子和B2的兄弟,然后它将B1和B2合并在一起形成C.现在我可以将C推回到遥控器而不会丢失任何历史,因为你的B1是正确地代表那里。