刚开始不熟悉推送,总是把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