注册

分支管理提交代码


前言:公司代码需要先放在开发分支上,后面提交的时候再合并到master主分支



开始复现场景:


image.png


git branch -a 输出来看,你的本地分支是 develop,而远程仓库中存在两个分支:origin/masterorigin/develop。此外,remotes/origin/HEAD 指向了 origin/master,这表明远程仓库的默认分支是 master


问题分析


你提到想把分支合并到 master 主分支上去,但 git branch 没有显示 master 分支。根据输出信息,可以确认以下几点:



  1. 本地没有 master 分支:当前只有 develop 分支。
  2. 远程存在 master 分支remotes/origin/master 表明远程仓库中有 master 分支。
  3. 远程默认分支是 masterremotes/origin/HEAD -> origin/master 表明远程仓库的默认分支是 master

解决方案


1️⃣ 创建并切换到本地 master 分支

首先,你需要在本地创建一个 master 分支,并将其与远程的 master 分支关联起来。


# 创建并切换到本地 master 分支,跟踪远程 origin/master
git checkout -b master origin/master

2️⃣ 将 develop 分支合并到 master 分支

确保你在 master 分支上,然后将 develop 分支的内容合并进来。


bash
深色版本
# 确保你在 master 分支上
git checkout master

# 合并 develop 分支
git merge develop

3️⃣ 解决可能的冲突 (没有冲突的话不需要执行这两条命令)

如果在合并过程中出现冲突,Git 会提示你手动解决这些冲突。解决冲突后,使用以下命令继续合并过程:


# 解决冲突后,添加已修改的文件
git add .

# 继续合并
git commit

4️⃣ 推送更改到远程 master 分支

最后,将合并后的更改推送到远程 master 分支。


bash
深色版本
# 推送更改到远程 master 分支
git push origin master



🛠️ 进阶操作:设置默认上游分支


如果你希望以后直接使用 git pullgit push 而不需要每次都指定分支,可以设置默认上游分支:


bash
深色版本
# 设置 master 分支的上游为 origin/master
git branch --set-upstream-to=origin/master master

这样,当你在 master 分支上时,可以直接使用 git pullgit push 命令,而不需要额外指定分支名。


报错了


image.png


远程仓库 master 分支包含了本地分支没有的更改。因此,Git 拒绝了你的推送请求,以防止丢失远程仓库中的工作。


错误原因


这个错误通常有以下几种可能的原因:



  1. 远程仓库有新的提交:在你上次拉取(git pull)之后,其他开发者可能已经向远程仓库的 master 分支推送了新的提交。
  2. 非快进式推送:你的本地 master 分支与远程 master 分支之间的差异无法通过简单的“快进”操作来解决,需要进行合并或变基。

解决方案


1️⃣ 先拉取远程仓库的最新更改

你需要先从远程仓库拉取最新的更改,然后将这些更改合并到你的本地分支中。


# 切换到 master 分支
git checkout master

# 从远程仓库拉取最新的更改
git pull origin master

如果 git pull 成功执行,它会自动将远程仓库的更改合并到你的本地分支中。如果有冲突,你需要手动解决这些冲突。


2️⃣ 解决冲突(如有必要)

如果在 git pull 过程中出现冲突,Git 会提示你手动解决这些冲突。解决冲突后,使用以下命令继续合并过程:


# 解决冲突后,添加已修改的文件
git add .

# 继续合并
git commit

3️⃣ 再次尝试推送更改

解决了所有冲突并完成合并后,你可以再次尝试将本地更改推送到远程仓库:


# 推送更改到远程 master 分支
git push origin master

还是报错


image.png


从你提供的错误信息来看,当前的状态是 MERGING,这表明你在合并过程中遇到了问题,并且还没有完成合并。因此,Git 拒绝了你的推送请求。


错误原因



  1. 合并尚未完成:你正在进行一个合并操作(可能是之前执行的 git merge 或 git pull),但还没有解决所有的冲突或完成合并。
  2. 本地分支落后于远程分支:即使解决了合并冲突,本地分支可能仍然落后于远程分支,需要先拉取最新的更改。

解决方案


1️⃣ 检查并完成合并

首先,你需要确保合并操作已经完成。如果存在未解决的冲突,你需要手动解决这些冲突。


查看当前状态,确认是否有未解决的冲突(查看本地和远程 master 分支的差异)

git status

如果 git status 提示你的本地分支落后于远程分支(例如 Your branch is behind 'origin/master' by X commits),你需要先拉取最新的更改。


如果有冲突文件,打开这些文件并手动解决冲突


解决冲突后,添加已修改的文件并提交:


# 添加已解决冲突的文件
git add .

# 提交合并
git commit

2️⃣ 拉取远程仓库的最新更改

在完成合并后,再次尝试拉取远程仓库的最新更改,以确保本地分支是最新的。


# 切换到 master 分支
git checkout master

# 从远程仓库拉取最新的更改
git pull origin master

如果 git pull 成功执行,它会自动将远程仓库的更改合并到你的本地分支中。如果有冲突,你需要手动解决这些冲突。


3️⃣ 再次尝试推送更改

解决了所有冲突并完成合并后,你可以再次尝试将本地更改推送到远程仓库:


# 推送更改到远程 master 分支
git push origin master

我本地如果删除了几个文件再更新到仓库去要怎么办?


你只需要用 git add .git rm 告诉 Git “这些文件是我有意删除的”,然后提交并推送到远程仓库即可。Git 会把“删除”也当作一次更改记录下来。




✅ 正确操作步骤(推荐)


1️⃣ 确认你已经删除了文件

你已经在本地手动删除了一些文件(比如用资源管理器或 rm 命令删的)。


2️⃣ 让 Git 检测到这些文件被删除

运行以下命令,Git 会发现哪些文件被删了,并把“删除”操作加入暂存区:


bash
深色版本
git add --all
# 或者简写:
git add .

💡 注意:

虽然 git add . 通常用于“添加新文件”,但它也会检测到被删除的文件,并自动执行 git rm 的效果。



⚠️ 如果你只用 git commit 而不先 add,Git 不会自动把删除纳入提交。



3️⃣ 提交删除操作

bash
深色版本
git commit -m "删除了不再需要的文件:xxx, yyy"

4️⃣ 推送到远程仓库

bash
深色版本
git push origin master
# 或者 main,根据你的分支名

✅ 完成!远程仓库也会删除这些文件。


作者:Hyinglin
来源:juejin.cn/post/7549096640340492338

0 个评论

要回复文章请先登录注册