2017-01-25 77 views
0

我对Git相当陌生,自从接受一个新的客户端(这是他们在开始为他们工作之前一直用来管理他们软件的版本控制)以来,在过去的几个月里一直使用它。Git用另一个分支替换master分支 - git merge -s我们的?

我最近合并了一个development分支和我的本地master分支,并将master推送到服务器。我已经在本地开发机器上测试了该网站(用Django/Python编写的网站),然后将其推送到服务器,并且它看起来都工作正常(包括已在development分支上实施的错误修复)。

但是,在测试推送到服务器后所做的更改后,我发现某些内容已损坏网站的一部分。所以我在服务器上检查了一个旧的commit,现场版本现在使用那个旧的commit,这意味着它处于“分离的HEAD”状态,但功能正常。

因此,我的本地master分支目前是我已推送到服务器(在本地工作,但没有在服务器上)的错误修复的版本,但由于我需要在另一方面该网站,我想恢复到master的备份,这是我在将development分支与bug修复合并到master之前所做的备份,因此我正在从代码的“最近运行”状态进行开发。

我有我的机器上的分支是:

master(与development合并到它,它打破了别的东西)

masterBackup(即master分支,因为它是合并development进去之前)

development(这是在其原有的bug已经修复的分支,但别的东西现在已经损坏)

如此有效,masterBackup实际上是我现在工作的'主'分支,因为合并developmentmaster破了master。我想再次让我的'主'分支masterBackup,并且在当前状态下的master可以被丢弃/删除。我仍然有development分支,所以可以查看为什么/如何破坏网站并在将其修复到master之前修复它。

我发现了这个问题How to replace master branch in git, entirely, from another branch?上公认的答案表明,我应该做以下步骤:

git checkout masterBackup 
git merge -s ours master 
git checkout master 
git merge masterBackup 

但我无法找到任何明确的解释命令git merge -s ours做什么...这是绝对如何让我的masterBackup分支再次成为master分支?

回答

3

的命令在该职位不适合你。该命令的结果是使masterBackup支路包括主分支的所有变化。因为这不是你想要的。

如果你只是想masterBackup分公司工作的主分支,您可以通过

git branch -m master master1 
git branch -m masterBackup master 

重新命名它现在masterBackup是更换主分支。但是,如果你想要把本地的master分支到远程主人,你应该使用git push -f origin master

0

最安全的选择是后回复到该被你的master分支发生作出的提交分离的承诺,一切工作正常:

git revert <SHA-1>^..HEAD # SHA-1 is the earliest commit you want gone 

这个选项将会使提交上master其顶部撤消范围中的每个提交。在此之后,你的分支应该在功能上与你想要的地方相同。您可以像平常一样继续工作,照常进行。

但你也可以重写的master历史,如果你想。

警告:此选项将改写您发表的master分支的历史,因此只应考虑,如果你能处理的都与此有关注意事项。

如果你想你的master分支永久恢复到以前的承诺,你可以做以下步骤:

git checkout master 
git reset --hard <SHA-1 of earlier commit you want to keep> 

这将覆盖本地master分支,使得它的头现在是较早运作的承诺。

注意,这将改变远程发布的master分支的历史,所以为了更新远程,你将不得不通过做力推:

git push --force origin master 
相关问题