退出对origin / master的提交

时间:2014-02-14 04:43:51

标签: git github git-revert

我对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。

  1. 如何在QA和GitHub上恢复主人?
  2. 我还需要在开发时还原主人吗?
  3. 如何保留我在开发时所做的分支更改?
  4. 请帮帮忙?

2 个答案:

答案 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系统时已经合并为主服务器。至于你目前的困境,我的(不一定是最好的)建议:

  1. 在您的本地主数据git revert <merge-commit>中,还原您的开发分支合并引入的更改。推动本地主人。把它拉到QA。在此之后,跨所有存储库的master应该处于相同的历史状态。
  2. 根据上述观点,为了保持存储库的一致性,我会这样做,是的。
  3. 在进行还原之前,请隐藏更改(参见git stash)。完成整个还原过程后,弹出更改(参见git stash pop)。
  4. 希望你觉得有用。