如何将开发分支重置为master

Posted

技术标签:

【中文标题】如何将开发分支重置为master【英文标题】:how to reset develop branch to master 【发布时间】:2013-08-28 12:04:36 【问题描述】:

我有developmaster 分支,我的develop 分支现在很乱,我想重置它并作为我的master 的副本。我不确定将master 合并到develop 是否会使它们都相同。在尝试合并后,我遇到了很多冲突,我使用以下方法解决了它们:

git checkout develop
git merge origin/master
//got many conflicts
git checkout . --theirs

这足以让develop 分支成为与master 相同的副本吗?

谢谢

【问题讨论】:

听起来您正在寻找delete the branch? develop设置为新的默认分支(用Github的web界面点击几下)是最可逆的解决方案。 是什么阻止您从 master 签出新分支? 【参考方案1】:

如果你只是希望它们是一样的

然后

//from Develop and assuming your master is up to date with origin/master
git reset --hard master

【讨论】:

这是对我有用的方法...否则您会收到有关路径无法硬重置的警告。 如果git push 失败并且更新被拒绝,因为您当前分支的尖端落后于其远程对应,那么git push -f 如果您得到类似的信息: refs/heads/ 的受保护分支更新失败,您必须在 github 上为该分支更新/删除分支保护规则。 github-->设置-->分支【参考方案2】:

如果你想让developmaster相同,最简单的方法就是重新创建指针:

git branch -f develop master

或者,如果您已经有 develop 签出:

git reset --hard develop master

但是请注意,这两个选项都将删除 develop 的任何历史记录,而这些历史记录不在 master 中。如果这不行,您可以通过创建一个镜像 master 的最新状态的提交来保留它:

git checkout develop
git merge --no-commit master
git checkout --theirs master .
git commit

【讨论】:

我的开发分支被其他开发者使用,所以如果我重置 --hard 我如何将它推送给其他开发者? @ra_htial 他们也需要重置它。如果您与其他人共享分支,您可能不想使用前两个选项,除非他们也知道要重置并且没有任何待处理的工作。 是的,我们都同意重置它,那么我们都应该重置它,然后开始我们的工作并像往常一样推送吗? 发现自己陷入了这种不幸的境地。我使用了最后一个解决方案,但它不会删除不在 master 中的文件。为此,我必须首先执行git diff-tree -r --diff-filter=D develop master 来查找文件,然后将它们一个接一个地删除,或者将它们的路径复制到一个文件中并运行cat file | xargs rm 您应该做下一个最佳答案中的内容,即一旦在开发分支上执行:git reset --hard master 否则您会收到错误消息【参考方案3】:

重置上次提交

git reset HEAD~ 

【讨论】:

这假设 develop 是从 master 分支出来的,并且是 master 之前的 1 个提交。 OP 有一个一般性问题:“我想重置它并将其作为我的master 的副本”。【参考方案4】:

例如使staging 分支与develop 相同,可以简单地重新创建指针:

首先通过运行以下命令确保您的本地开发分支是最新的 origin/developgit checkout develop && git pull origin develop

然后检查您的目标分支(在本例中为 staginggit checkout staging

最后但并非最不重要的重置目标分支 git reset --hard develop

通过蛮力推送更改(git会抱怨,因为本地指针有不同的地址) git push -f

差不多就是这样!

【讨论】:

【参考方案5】:

如果一切都失败了,您可以删除当前分支,然后直接从 master 重新创建它。

git branch -D develop
git checkout master
git checkout -b develop

【讨论】:

【参考方案6】:

我参加聚会有点晚了,但是,在将我的 dev 分支合并到 master 并推送到服务器之后,我执行以下操作:

git fetch

git checkout development

git merge origin/master

git push

dev 分支是 master 分支之前的一次提交,其他开发者不必担心 development 分支中的所有提交都被重置。

【讨论】:

以上是关于如何将开发分支重置为master的主要内容,如果未能解决你的问题,请参考以下文章

text 使用存储将所有更改重置为分支

sh 将当前分支重置为远程状态

text git将master分支重置为最新

Git将功能分支中的单个文件重置为与master中的相同[重复]

如何在 JGit 中从一个 git 分支硬重置到另一个分支?

将 master 重置为空状态