2017-03-06 85 views
1

我有Git master和dev分支。在尝试将我的开发分支合并到我的主分支的过程中,我无意中做了一些错误,现在看起来主控已经搞乱了。我知道我的开发分支是好的,我不希望发生任何事情,所以我试图用我的开发分支替换我的主分支。如果我可以保留我的主提交日志条目,但是我可以丢失它们,只要我可以保留dev中的所有内容即可。我试图实施这个Stackoverflow question中描述的解决方案,但他们不工作。下面是我所做的:无法用dev分支覆盖Git master分支

$ git checkout dev 
$ git branch -f master dev 
$ git checkout master 
Switched to branch 'master' 
Your branch is behind 'origin/master' by 4 commits and can be fast-forward. 
(use "git pull" to update your local branch) 

如果我那么做“混帐拉”,主分支不再包含Dev的变化和Git告诉我,我的分支上最新与“产地/主”。现在我该怎么做?这是如何覆盖主开发? Master不包含开发变更。如果我现在做“git merge --no-ff dev”,Git说“已经是最新的”。

我也试图这样做,以实现第二个答案如下:

$ git checkout dev 
$ git merge -s ours --no-commit master 
Already up-to-date. 
% git commit 
On branch dev 
Your branch is up-to-date with 'origin/dev'. 
nothing to commit, working tree clean 
$ git checkout master 
Your branch is behind 'origin/master' by 4 commits and can be fast-forward. 
(use "git pull" to update your local branch) 

正如你所看到的,这需要我马上回我在那里当我试图实施第一个解决方案。我完全困惑。我如何用我的开发分支覆盖我的主分支?

+0

阅读关于git reflog。 Git在如何恢复到不同的“动作”方面非常灵活。 –

+0

您可以使用像gitk这样的图形存储库浏览器来了解情况。 'gitk'还允许您通过首先检出该分支,然后右键单击所需的提交并选择'Reset to here',将分支指针移动到您喜欢的任何提交。 – mkrieger1

+0

从“狗狗”获取帮助:'git log --all --decorate --oneline --graph'(** a ** ll ** d ** ecorate ** o ** neline ** g ** raph = adog)。或者,使用图形浏览器,如@ mkrieger1建议的那样。很显然,问题的部分原因是您的上游存储库('origin/*')提供了您试图从历史记录中“编辑”的提交内容,但尚不清楚您的其他情况。 – torek

回答

0

这将是很好,如果我能保持我的主人提交日志条目

我会创造你目前掌握的一个新的分支来跟踪所有的历史。

  1. git checkout master
  2. git branch old-master

我想用我的Dev分支来代替我的主分支

要简单地做到这一点,我只想硬重置你的主人分支到你的开发分支。

  1. git checkout master
  2. git reset --hard dev

这将毫不夸张的master分支的头正好移动到dev分公司的负责人。

这将保持你的旧master历史在old-master而不会搞乱任何东西。这也不会触及你的dev分支。

+0

但是当我做“git reset --hard dev”时,Git说:“你的分支在5次提交后落后于origin/master,并且可以被快速转发。”然后它说要做“git pull”来更新你的本地分支。但是,如果我做了“git pull”,那么只需拉下旧的主代码,并覆盖在进行硬重置时从开发分支中引入的更改。再次,我陷入了一个无限循环。我似乎无法将开发人员的更改导入主服务器,然后将这些更改的新版主服务器推送到远程主服务器回购站。到底是怎么回事?为什么这不起作用?我只是不明白。 – William

+0

当你进行硬重置时,你正在改变历史。如果你想在历史中传播这种变化,你需要按照上面第3步的“底部方向”做一个'git push --force'。这将消除主人的远程历史,而是强制它成为当前的地方。我的脚步仍然会“保留”那位老主人的历史,因为我们在那里分支,让它保持活力。 'master'将是开发的地方(远程带有强制推送),'old-master'将会是主人曾经使用过的地方。 – g19fanatic

+0

这是失踪的一步!谢谢!!!!! – William