git工作场景——修debug和增feature

本文介绍如何使用Git的stash功能保存当前工作进度,并通过创建临时分支修复bug或开发新功能,最后如何恢复工作现场。

在开发时候临时任务,如需要debug其他内容,或者是要新开发一个需要模块feature,那就需要先停下保存好手头工作,然后完成临时任务,继而恢复工作区继续工作。

保存目前手头内容

$ git stash

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。

建立bug分支

  1. 在分支上找到bug,确定分支然后建立临时分支进行修复。比如在master分支上建立分支。
  2. 建立分支,$ git checkout -b issue1
  3. 修复bug后提交文件合并分支
 $ git add ...... 
$ git commit -m "fix bug "
  1. 修复完成后切换回到分支并完成合并,最后删除issue1分支
$ git switch master
$ git meage --no-ff -m "merged bug fix " issue1

返回待工作分支

  1. 查看原先工作区
$ git stash list
  1. 工作现场还在,Git把stash内容存在某个地方了,需要恢复一下,有两个办法:一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了,如下所示。
$ git stash apply
Removing t2.md
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    t2.md

no changes added to commit (use "git add" and/or "git commit -a")


$ git stash list
stash@{0}: WIP on master: f04f5fc need to delete


$ git stash pop
Removing t2.md
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    t2.md

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (d0db5a622814a33cd13f48c7561154c0ad356e7c)


$ git stash list

  1. 再次输入 git stash list,此时找不到任何stash内容,表明已经恢复了。

增feature

软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
步骤如下

  1. 保存手头工作
  2. 根据待开发一个新feature,新建一个子分支;
  3. 完成工作合并子分支,删除子分支。如果要丢弃一个没有被合并过的子分支,可以通过git branch -D 强行删除。
  4. 还原手头工作
<think>嗯,用户想了解Git远程分支的使用指南或常见问题解决方案,需要整理一个系统的指南。用户提供的信息中包含了多个相关引用片段,但需要筛选核心内容并融入指南。引用[1]提到远程分支删除的两种方式,这个很实用,应该放在操作指南的"删除远程分支"部分;引用[2]说明fetch操作的原理,可以用来解释基础概念;引用[3]展示了在master分支创建远程分支前的状态检查,可以作为"创建远程分支"的示例;引用[4]则引入了分支跟踪的概念,适合"跟踪分支"的说明部分。考虑到用户可能是刚接触Git的新手,准备从基础概念开始组织内容:先说明什么是远程分支,然后分创建、查看、删除等操作类型逐步展开。常见问题方面,用户可能遇到的误删除、冲突等场景要特别标注解决方案。注意用户特别要求操作指南必须包含具体命令格式。要补充引用没提到的实用技巧,比如重命名远程分支的变通方法——这个常被问到。每个操作点都要配$...$格式的命令示例,像$gitpushorigindevelop这样。最后生成的"相关问题"要覆盖未涉及的进阶内容,为可能出现的后续问题做准备。</think> 以下是一份系统的 Git 远程分支使用指南及常见问题解决方案,涵盖核心操作典型场景: --- ### 🔁 **Git 远程分支操作指南** #### **1. 创建远程分支** ```bash # 从本地分支推送并创建远程分支 (以 develop 为例) $ git push -u origin develop # 若需指定不同名称(本地分支->远程分支名) $ git push -u origin local_branch:remote_branch ``` - `-u` 参数建立跟踪关系,后续可直接 `git push`[^3] - **验证**:通过 `$ git branch -r` 检查远程分支列表 #### **2. 查看远程分支** ```bash # 查看所有远程分支 $ git branch -r # 查看本地+远程分支(含跟踪关系) $ git branch -vv ``` - 执行 `$ git fetch` 更新远程分支信息[^2] #### **3. 删除远程分支** ```bash # 方法1:推送空分支(推荐) $ git push origin :remote_branch # 方法2:使用 --delete 参数 $ git push origin --delete remote_branch ``` - ⚠️ **注意**:删除操作无法撤销[^1] #### **4. 分支跟踪(Tracking Branch)** ```bash # 为本地分支设置跟踪远程分支 $ git branch --set-upstream-to=origin/remote_branch local_branch # 推送时自动跟踪 $ git push -u origin local_branch ``` - **应用场景**:推送时无需指定远程分支名(`git push` 自动同步到跟踪分支)[^4] --- ### 🚨 **常见问题解决方案** #### **问题1:本地分支与远程分支失去关联** **现象**:`git pull` 提示 `no tracking information` **复**: ```bash $ git branch --set-upstream-to=origin/remote_branch ``` #### **问题2:远程分支已删除,本地仍显示** **原因**:本地仓库缓存未更新 **解决**: ```bash # 清理过时的远程分支引用 $ git fetch --prune ``` #### **问题3:多人协作冲突** **场景**:多人同时改同一远程分支 **处理流程**: ```bash $ git pull # 拉取最新代码(自动尝试合并) $ git mergetool # 解决冲突文件 $ git commit -m "Fix conflicts" $ git push # 重新推送 ``` #### **问题4:误删远程分支** **恢复步骤**: 1. 通过 reflog 查找分支最后提交哈希值: ```bash $ git reflog | grep branch_name ``` 2. 从该提交重建分支: ```bash $ git checkout -b recovered_branch <commit-hash> $ git push origin recovered_branch ``` --- ### ⚙️ **最佳实践** 1. **命名规范**:远程分支建议用 `feature/xxx`, `fix/yyy` 等前缀区分类型 2. **定期清理**:合并后删除无用分支(本地+远程) 3. **权限控制**:通过 Git 服务端设置受保护分支(如 main/prod) 📚 **原理补充**: 执行 `git fetch` 时,Git 会更新 `.git/refs/remotes/origin/` 下的远程分支引用文件,并下载缺失的 objects 对象[^2]。本地操作(如 merge/push)仅改 `.git/refs/heads/` 中的本地分支引用。 --- ### ❓ **相关问题** 1. 如何将本地分支重命名为远程分支? 2. Git 远程分支与 Tag 有何本质区别? 3. 如何通过 Git Hook 实现远程分支自动部署? 4. 解决 `git push` 时出现 `non-fast-forward` 错误的完整流程?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值