2013-07-17 197 views
0

我一直在一个分支工作,比如master。更改已经推送到远程存储库。我的历史是这样的:恢复分支git

*----*----*----* master 

然后我意识到我可能做错事,并希望从一个不同的方法开始。我通过创建一个新的分支做到这一点:

*----*----*----* master 
    \ 
     *----*----* different-approach 

一些新提交后,我决定,新的方法效果比在主分支好,所以我想用,从现在起就master分支。所以我做了合并:

git checkout master 
git merge different-approach 

如果有任何冲突,我总是选择从different-approach合并版本。问题在于,对于某些文件没有冲突,所以git会自动合并,留下来自master分支的坏东西。

我能在这种情况下做什么?似乎没有办法强制手动合并所有git文件。当然,我可以将库克隆到不同的目录,并在提交合并之前将其中的所有文件复制到原始目录。但是,没有一种更简单,更简单的方法来做到这一点?

回答

2

通过恢复不需要的提交来修复它。

// Revert all commits in master one-by-one 
$ git checkout master 
$ git revert --no-edit different-approach..master 
$ git merge different-approach 

// Revert all commits in master at once 
$ git checkout master 
$ git revert --no-commit different-approach..master 
$ git commit -m "Revert foo" 
$ git merge different-approach 
+0

如果其他人将更改推送给主人,这可能会导致问题。他们的承诺也会恢复。 – gtrig

+0

那么,我期望作者能够运行任何日志查看器来确认他已经恢复了什么。 –

-1

如果你想完全忽略master的变化不是different-approach您可以:

git checkout master 
git reset --hard different-approach 

警告,这将彻底消灭变化对master不是different-approach

+0

我的猜测是,如果主人已经被推动,它将无法正常工作。至少它不应该。这就是为什么我需要合并。 – petersohn

+0

您是否想要更改远程主设备?如果是'git reset --hard different-approach'后,你可以'git push -f'。警告这会在遥控器上重写历史记录,以至于以前的更改似乎从未发生过。 – cforbish