正如主题所述,我有一个dev git分支,它提前16次提交,8次跟在master之后。主人提前8,但提交没用,源代码有缺陷。我需要删除它们。
我试图让我的dev分支成为新的主人,只需切换。
git branch -m master old_master
git branch -m develop master
git push --set-upstream origin master
但是我收到了一条错误消息:
To git@XYZ.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@XYZ.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
那我现在该怎么办?我的目标基本上是让dev成为新的主人,或者回到主人和dev那里“等于”然后进行合并。
有什么想法吗?
答案 0 :(得分:3)
注意:无论你尝试什么方法,都要确保" unrename"首先是您的本地分支,即本地计算机上的原始 master
和dev
确实命名为" master"和" dev,"分别
如果你没有推动你想要的提交,那么做一个简单的硬重置的建议是一个很好的建议"撤消"对于服务器,在这种情况下,似乎你已经推送它们(如果不是这样的话,你可以忽略这个答案,并使用ckruczek的答案,这将导致更清洁历史)。一旦提交被推送到服务器,它们实际上无法撤消,除非你a)强制推动和 b)让你的团队的每个成员也在他们的结束时进行硬重置。
如果您只想让master
反映dev
中的内容,则以下步骤即可完成,而不会尝试重写历史记录。首先,确保您拥有服务器的最新信息:
git checkout master
git pull
git checkout dev
git pull
然后,进行合并:
git merge master -s ours
git checkout master
git merge dev
完成这些步骤后,master
和dev
都会指向相同的提交,其内容与dev
之前的内容相同。当然,您需要在执行这些步骤后将dev
和master
推送到origin
。
答案 1 :(得分:2)
想象一下下面的图:
你现在的意思是,不需要在蓝色分支之后的提交。所以你做了一个
$ git reset --hard 2
现在你可以用简单的快进合并你的蓝色分支
git checkout master
git merge dev
git push origin master