git操作案例 -设置远程分支,并提交到新远程新分支


前言

在实际的开发中,经常会遇到这样的问题。
拿到新项目是个二开或者是从别的仓库拿到的代码。这个时候自己先写了一部分的功能。

写完代码要提交,发现远程仓库连接地址不对,这个时候已经提交了 git commit -m ''之后的操作。
需要
更改远程分支
,并将本地分支提交到远程的新分支(本地不存在这个分支)


一、分析当前的问题

  1. 远程仓库地址不对 - 需要更改新的远程仓库地址
  2. 本地的代码已经 **git commit ** 提交到本地仓库 - 需要将提交的代码找回来
  3. 要提交的地址是新远程分支的非默认分支 本地不存在 - 需要与远程同步分支,并将本地提交到需要分支

二、修改远程仓库地址

(一)修改远程仓库地址

当前的远程仓库地址不对,我们要的是B仓库,现在是A。

场景 现有保留远程分支

  1. 添加新的远程仓库,保留当前远程。假设名字为(newremote)
git remote add newremote <新仓库的URL>
  1. 将本地分支推送到新远程
git push newremote 本地分支名
  1. 建立本地分支与新远程分支的追踪关系
git branch -u newremote/远程分支名 本地分支名

场景替换现有远程分支

  1. 修改现有远程的URL
git remote set-url origin <新仓库的URL>
  1. 本地分支推送到新仓库
git push origin 本地分支名

二、 找回已经提交的文件

场景:提交后,代码在本地仓库但未推送

代码已经通过 git commit 提交到本地 Git 仓库,但还没有 git push 到远程。

  1. 查看刚刚提交记录
git log --oneline #查看所有提交的记录
git log --oneline -n 5  # 只显示最近的5条提交
git log --oneline HEAD  # 查看当前分支的提交历史
git log --oneline --graph --decorate  # 带分支/合并关系的可视化显示

我们也可以通过vscode工具查看,通过刚刚提交的分支,可以看到我们的记录是否存在

在这里插入图片描述
只要提交了,代码就安全地存储在 Git 里

  1. 撤回刚刚的提交记录。这会让代码回到暂存区(git add 状态)。
git reset --soft HEAD~1

或者也可以 直接完全撤回 修改还在,但需要重新 git add

git reset HEAD~1

三、同步远程分支

与远程分支同步

git fetch origin

切换到远程分支(如果报错 先忽略)

git checkout 需要的远程分支名

确认是否已经同步

git branch 

这时就可以看到本地已经有两个分支了

四、提交到新远程的新分支

在刚刚的三部操作中,我们已经拿到了代码,拿到了远程分支,只要推送就可以

但是我们的代码在 master里面我们需要先换到 dev再 提交
所以刚刚git checkout 分支 的时候会报错,因为我们代码还在 master(默认)分支里面

我们 将代码暂存

git stash 

切换分支(不会报错)

git checkout dev 

将暂存的代码取出

git stash pop

提交

git push

大功告成!!

### 如何更本地的远程分支列表以同步最远程仓库状态 为了确保本地的远程分支列表与远程仓库的状态保持一致,可以通过 `git fetch` 和其附加参数来实现这一目标。以下是具体的方法: #### 方法一:使用 `--prune` 参数 当执行 `git fetch --prune` 或者简写形式 `git fetch -p` 时,Git 不仅会拉取远程仓库中的新分支和更现有分支的信息,还会移除那些在远程仓库中已经被删除的分支对应的本地远程跟踪分支[^2]。 ```bash git fetch --prune ``` 或者更简洁的形式: ```bash git fetch -p ``` 此命令的作用在于清理不再存在的远程分支记录,从而让本地的远程分支列表始终反映远程的实际状态。 #### 方法二:使用 `git remote update` 另一种方式是利用 `git remote update` 命令,它同样能够完成对所有远程仓库的远程跟踪分支的更工作,且支持通过 `--prune` 参数进一步优化行为[^1]。 ```bash git remote update --prune ``` 这条指令不仅适用于单一指定的远程仓库(如默认的 `origin`),还可以作用于多个配置好的远程源上,提供更为全面的同步效果。 #### 方法三:针对特定远程仓库的操作 如果只需要专注于某个具体的远程仓库(通常是命名为 `origin` 的那个),可以直接对其应用带有 `--prune` 的 `fetch` 动作[^3]: ```bash git fetch origin --prune ``` 这种方式特别适合项目中有多个不同命名的远程仓库场景下,精确控制哪些资源需要被刷或整理。 #### 特殊情况处理 需要注意的是,在某些特殊情况下比如曾经手动调整过远程连接关系之后可能会遇到异常状况。例如提到的一个案例显示,在重定义了额外的远程地址映射后可能导致常规 `git fetch` 出现错误提示[^5]。此时应该仔细检查当前环境下的实际配置是否正确无误后再尝试上述标准流程。 --- ### 总结代码示例 以下是一些常用的命令组合供参考: ```bash # 清理同步所有的远程分支信息 git fetch --prune # 针对单个远程仓库进行相同操作 git fetch origin --prune # 执行全局范围内的远程数据同步(含修剪功能) git remote update --prune ``` 以上任选一种都可以有效达成使本地副本匹配最线上版本的目的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值