刚开始不熟悉推送,总是把master和main搞混,对于一个人维护的项目来说,实属没必要这么麻烦,所以记录一下,确保所有的新提交都进入main。
方案一:将本地 master 合并到本地 main,然后推送 main (推荐)
这个方法最安全,因为它保留了当前 master 分支上的所有工作,并将其合并到 main。
切换到 main 分支:
首先,确保当前位于 master 分支,然后切换到 main 分支。
Bash
git checkout main如果提示
main分支不存在,那可能是本地还没有main分支,或者main分支被叫做master。可以先尝试git branch -a查看所有本地和远程分支,确认远程主分支是remotes/origin/main。如果本地没有main,创建一个并跟踪远程的main:Bash
git checkout -b main origin/main拉取最新 main 分支:
确保本地 main 分支是最新的,以防有其他人在 GitHub 上直接对 main 做了修改。
Bash
git pull origin main将 master 分支的修改合并到 main:
现在,把 master 分支上所有新的提交合并到 main 分支。
Bash
git merge master如果出现冲突,Git 会告诉哪些文件有冲突。需要手动解决这些冲突(打开冲突文件,编辑它们,保留想要的部分,然后删除 Git 自动添加的冲突标记),解决完后
git add .再git commit。将 main 分支推送到 GitHub:
现在,main 分支包含了 master 上的所有最新修改。把它推送到 GitHub。
Bash
git push origin main如果之前对
master做了git commit --amend并强制推送过,现在在main上git push可能也会遇到需要强制推送的情况,因为main的历史可能和origin/main不一致。 如果出现这种提示,并且确认main是正确的,可以尝试:Bash
git push -f origin main(可选)删除本地 master 分支:
如果只想在 main 上工作,并且 master 分支上没有需要的东西,可以删除本地 master 分支。
Bash
git branch -d master如果
master还有未合并的提交,会报错。可以使用-D强制删除:git branch -D master(谨慎使用,因为会丢失未合并的提交)。
方案二:重置 main 分支到 master 的状态 (更直接,但会覆盖 main 历史)
这个方法更简单粗暴,它会直接让本地 main 分支“变成”本地 master 分支的样子。请注意,这会丢失 main 分支上可能存在的、而 master 分支上没有的任何提交。
确保当前位于
master分支:Bash
git checkout master强制重置
main分支到master的状态:Bash
git branch -f main master这会强制将本地
main分支的引用指向master分支的最新提交。切换到
main分支:Bash
git checkout main强制推送到 GitHub 的 main 分支:
这将用本地 main 分支的(现在和 master 一样)历史,覆盖 GitHub 上的 main 分支历史。
Bash
git push -f origin main这个强制推送是必须的,因为它修改了远程
main的历史。(可选)删除本地 master 分支:
如果以后只需要 main 分支,可以删除本地 master 分支。
Bash
git branch -d master


