我在Git中有一个存储库。我做了一个分支,然后对主分支和分支都做了一些更改。

然后,几十次提交之后,我意识到分支的状态比主分支好得多,所以我希望分支“成为”主分支,并忽略对主分支的更改。

我无法合并它,因为我不想将更改保留在master上。我该怎么办?

额外:在本例中,“旧”主控已被推送到另一个存储库,如GitHub。这是如何改变事情的?


当前回答

对我来说,我希望我的开发分支在领先之后回到主分支。

在开发过程中:

git checkout master
git pull

git checkout develop
git pull

git reset --hard origin/master
git push -f

其他回答

还可以将其他分支中的所有文件签出到master中:

git checkout master
git checkout better_branch -- .

然后提交所有更改。

通过以下方式将分支重命名为主分支:

git branch -M branch_name master

我很惊讶这里没有答案。这就是我所做的。

在我的文件系统中的不同目录中制作了两个repo副本,一个是主副本,另一个是分支副本。将分支中的所有文件(手动)复制到主文件已将更改提交给master。

这样,就有了一个包含所有差异的提交,保存了提交历史,不需要强制推送。

我在博客文章中找到了我想要的答案。用git中的另一个分支替换主分支:

git checkout feature_branch
git merge -s ours --no-commit master
git commit      # Add a message regarding the replacement that you just did
git checkout master
git merge feature_branch

这与卡斯卡贝尔的答案基本相同。除了他们的解决方案下面的“选项”已经嵌入到上面的代码块中。

这样更容易找到。

我将此添加为新答案,因为如果以后需要此解决方案,我希望在一个代码块中包含所有需要使用的代码。

否则,我可能会复制并粘贴,然后阅读下面的详细信息,以查看我应该更改的行-在我已经执行它之后。

我发现这个简单的方法效果最好。它不会重写历史,分支的所有先前签入都将附加到主节点。没有丢失任何内容,您可以在提交日志中清楚地看到发生了什么。

目标:使“分支”的当前状态成为“主”

在分支上工作,提交并推送更改,以确保本地和远程存储库是最新的:

git checkout master      # Set local repository to master
git reset --hard branch  # Force working tree and index to branch
git push origin master    # Update remote repository

在此之后,您的master将是分支的最后一次提交的确切状态,并且您的master提交日志将显示分支的所有签入。