0

我对 git 比较陌生,我想我打破了我的主人。希望有人可以帮助我解开它。

我在 GitHub 上有我的 master,在我的开发系统上有本地 master 和 tracking 分支。我的 QA 系统上也有大师。

在我的开发系统上,我提交了我的本地分支并将其合并到(本地)master,然后将 master 推送到 GitHub 的 origin/master。然后,我把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 主控......实际上,退出整个合并。然后,我想将分支(而不是 master)推送到 GitHub,并将分支拉到 QA。

  1. 如何在 QA 和 GitHub 上恢复大师?
  2. 我是否还需要恢复开发大师?
  3. 如何保留我在开发中所做的分支更改?

请帮忙?

4

2 回答 2

1

你应该推送一个分支而不是合并到 master 吗?

这是个好问题。如果提交是高度实验性的,那么推送一个分支可能会更好。否则,如果您对提交有很高的信心,那么合并到 master 是正确的。如果您不必这样做,则无需使用远程分支污染您的工作区。

假设您想将此提交切换到一个分支并远程推送它。我将为这种情况绘制一个提交图:

A-C-D
 \   \
  B---E < master, your_branch

假设master在B,C&D在your_branch上。E 是两者的合并提交。关于你的问题。您可以通过修复本地存储库来恢复 GitHub 和 QA 上的 master,然后强制 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 上的 master 回到 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
于 2014-02-14T07:23:18.327 回答
0

对我来说,最初的问题似乎是个人工作流程偏好的问题,即您是否希望开发分支在到达 QA 系统时已经合并到 master 中。至于你目前的困境,我的(不一定是最好的)建议:

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

希望你觉得这很有用。

于 2014-02-14T06:21:46.820 回答