如何将开发分支重置为master
Posted
技术标签:
【中文标题】如何将开发分支重置为master【英文标题】:how to reset develop branch to master 【发布时间】:2013-08-28 12:04:36 【问题描述】:我有develop
和master
分支,我的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/如果你想让develop
与master
相同,最简单的方法就是重新创建指针:
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/develop
:
git checkout develop && git pull origin develop
然后检查您的目标分支(在本例中为 staging
)
git 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的主要内容,如果未能解决你的问题,请参考以下文章
Git将功能分支中的单个文件重置为与master中的相同[重复]