退出对原始/主文件的提交



我对git还比较陌生,我想我打破了我的大师。希望有人能帮我解开它。

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

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

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

请帮忙?

是否应该推送分支而不是合并到master?

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

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

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

假设master在B,而C&D在你的牧场上制作的。E是两者的合并提交。回答您的问题。您在GitHub&QA通过修复您的本地存储库,然后强制GitHub特别匹配它。所以实际上,您的问题最好以相反的顺序得到回答。

首先我们修复您的分支

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

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

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

希望你觉得有用。

最新更新