我对git比较陌生,我想我打破了我的主人。希望有人可以帮我解开它。
我在GitHub上有我的主人,在我的开发系统上有本地主人和跟踪分支。我的QA系统上也有主人。
在我的开发系统上,我提交了我的本地分支并将其合并到(本地)主服务器,然后将主服务器推送到GitHub的origin / master。然后,我把主人拉到QA系统。然后,我对我当地的分支做了一些进一步的修改。
我做的是:
dev branch -- merge --> dev master
dev master -- push --> GitHub master -- pull --> QA master
我想我应该这样做:
dev **branch** -- push --> GitHub **branch** -- pull --> QA **branch**
是吗?
现在:我想在提交之前恢复QA和GitHub主服务器...实际上,退出整个合并。然后,我想将分支(而不是主分支)推送到GitHub,并将分支拉到QA。
请帮帮忙?
答案 0 :(得分:1)
你是否应该推动分支而不是合并为主?
这是一个很好的问题。如果提交是高度实验性的,那么推动分支可能会更好。否则,如果您对提交有很高的信心,那么合并到master是正确的。如果您不需要,则无需使用远程分支污染您的工作区。
假设您要将此提交切换到分支并远程推送它。我将为此场景绘制一个提交图:
A-C-D
\ \
B---E < master, your_branch
让我们说主人在B,C&amp; D在your_branch上创建的地方。 E是两者的合并提交。关于你的问题。你在GitHub&amp; QA通过修复本地存储库,然后强制GitHub特别匹配它。所以实际上你的问题最好以相反的顺序回答。
首先我们修复your_branch
git checkout your_branch
git reset --hard D
这会将分支移动到D,产生:
A-C-D < your_branch
\ \
B---E < master
现在我们修复您的本地开发大师
git checkout master
git reset --hard B
给出了:
A-C-D < your_branch
\
B < master
再见,不必要的合并提交E。
修复GitHub(和QA)
git checkout master
git push -f
这将迫使GitHub上的主人回到B.如果你与其他开发者合作,他们会因为你重写历史而讨厌这个。但是,由于这可能是你没有合作的个人存储库,所以去吧。现在做一个远程分支:
git checkout your_branch
git push origin your_branch
现在已修复GitHub以匹配开发,更新QA应该很简单:
git checkout master
git pull
git reset --hard origin/master # I'm assuming master will be on an orphaned commit after the pull
答案 1 :(得分:0)
对我来说,最初的问题似乎是个人工作流程偏好的问题,即您是否希望开发分支在到达QA系统时已经合并为主服务器。至于你目前的困境,我的(不一定是最好的)建议:
git revert <merge-commit>
中,还原您的开发分支合并引入的更改。推动本地主人。把它拉到QA。在此之后,跨所有存储库的master应该处于相同的历史状态。git stash
)。完成整个还原过程后,弹出更改(参见git stash pop
)。希望你觉得有用。